Passed
Push — master ( 1955b9...c5754d )
by Darío
06:42
created

bootstrap.js ➔ ... ➔ _getMenuElement   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 5

Duplication

Lines 9
Ratio 100 %

Importance

Changes 0
Metric Value
eloc 5
dl 9
loc 9
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 0
1
/*!
2
  * Bootstrap v4.0.0 (https://getbootstrap.com)
3
  * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
  */
6 View Code Duplication
(function (global, factory) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
7
	typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :
8
	typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :
0 ignored issues
show
Bug introduced by
The variable define seems to be never declared. If this is a global, consider adding a /** global: define */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
9
	(factory((global.bootstrap = {}),global.jQuery,global.Popper));
10
}(this, (function (exports,$,Popper) { 'use strict';
11
12
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
14
15
function _defineProperties(target, props) {
16
  for (var i = 0; i < props.length; i++) {
17
    var descriptor = props[i];
18
    descriptor.enumerable = descriptor.enumerable || false;
19
    descriptor.configurable = true;
20
    if ("value" in descriptor) descriptor.writable = true;
21
    Object.defineProperty(target, descriptor.key, descriptor);
22
  }
23
}
24
25
function _createClass(Constructor, protoProps, staticProps) {
26
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
27
  if (staticProps) _defineProperties(Constructor, staticProps);
28
  return Constructor;
29
}
30
31
function _extends() {
32
  _extends = Object.assign || function (target) {
0 ignored issues
show
Comprehensibility introduced by
It seems like you are trying to overwrite a function name here. _extends is already defined in line 31 as a function. While this will work, it can be very confusing.
Loading history...
33
    for (var i = 1; i < arguments.length; i++) {
34
      var source = arguments[i];
35
36
      for (var key in source) {
0 ignored issues
show
Complexity introduced by
A for in loop automatically includes the property of any prototype object, consider checking the key using hasOwnProperty.

When iterating over the keys of an object, this includes not only the keys of the object, but also keys contained in the prototype of that object. It is generally a best practice to check for these keys specifically:

var someObject;
for (var key in someObject) {
    if ( ! someObject.hasOwnProperty(key)) {
        continue; // Skip keys from the prototype.
    }

    doSomethingWith(key);
}
Loading history...
37
        if (Object.prototype.hasOwnProperty.call(source, key)) {
38
          target[key] = source[key];
39
        }
40
      }
41
    }
42
43
    return target;
44
  };
45
46
  return _extends.apply(this, arguments);
47
}
48
49
function _inheritsLoose(subClass, superClass) {
50
  subClass.prototype = Object.create(superClass.prototype);
51
  subClass.prototype.constructor = subClass;
52
  subClass.__proto__ = superClass;
53
}
54
55
/**
56
 * --------------------------------------------------------------------------
57
 * Bootstrap (v4.0.0): util.js
58
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
59
 * --------------------------------------------------------------------------
60
 */
61
62
var Util = function ($$$1) {
63
  /**
64
   * ------------------------------------------------------------------------
65
   * Private TransitionEnd Helpers
66
   * ------------------------------------------------------------------------
67
   */
68
  var transition = false;
69
  var MAX_UID = 1000000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
70
71
  function toType(obj) {
72
    return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
73
  }
74
75
  function getSpecialTransitionEndEvent() {
76
    return {
77
      bindType: transition.end,
78
      delegateType: transition.end,
79
      handle: function handle(event) {
80
        if ($$$1(event.target).is(this)) {
81
          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
82
        }
83
84
        return undefined; // eslint-disable-line no-undefined
85
      }
86
    };
87
  }
88
89
  function transitionEndTest() {
90
    if (typeof window !== 'undefined' && window.QUnit) {
91
      return false;
92
    }
93
94
    return {
95
      end: 'transitionend'
96
    };
97
  }
98
99
  function transitionEndEmulator(duration) {
100
    var _this = this;
101
102
    var called = false;
103
    $$$1(this).one(Util.TRANSITION_END, function () {
104
      called = true;
105
    });
106
    setTimeout(function () {
107
      if (!called) {
108
        Util.triggerTransitionEnd(_this);
109
      }
110
    }, duration);
111
    return this;
112
  }
113
114
  function setTransitionEndSupport() {
115
    transition = transitionEndTest();
116
    $$$1.fn.emulateTransitionEnd = transitionEndEmulator;
117
118
    if (Util.supportsTransitionEnd()) {
119
      $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
120
    }
121
  }
122
123
  function escapeId(selector) {
124
    // We escape IDs in case of special selectors (selector = '#myId:something')
125
    // $.escapeSelector does not exist in jQuery < 3
126
    selector = typeof $$$1.escapeSelector === 'function' ? $$$1.escapeSelector(selector).substr(1) : selector.replace(/(:|\.|\[|\]|,|=|@)/g, '\\$1');
127
    return selector;
128
  }
129
  /**
130
   * --------------------------------------------------------------------------
131
   * Public Util Api
132
   * --------------------------------------------------------------------------
133
   */
134
135
136
  var Util = {
137
    TRANSITION_END: 'bsTransitionEnd',
138
    getUID: function getUID(prefix) {
139
      do {
140
        // eslint-disable-next-line no-bitwise
141
        prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
142
      } while (document.getElementById(prefix));
143
144
      return prefix;
145
    },
146
    getSelectorFromElement: function getSelectorFromElement(element) {
147
      var selector = element.getAttribute('data-target');
148
149
      if (!selector || selector === '#') {
150
        selector = element.getAttribute('href') || '';
151
      } // If it's an ID
152
153
154
      if (selector.charAt(0) === '#') {
155
        selector = escapeId(selector);
156
      }
157
158
      try {
159
        var $selector = $$$1(document).find(selector);
160
        return $selector.length > 0 ? selector : null;
161
      } catch (err) {
162
        return null;
163
      }
164
    },
165
    reflow: function reflow(element) {
166
      return element.offsetHeight;
167
    },
168
    triggerTransitionEnd: function triggerTransitionEnd(element) {
169
      $$$1(element).trigger(transition.end);
170
    },
171
    supportsTransitionEnd: function supportsTransitionEnd() {
172
      return Boolean(transition);
173
    },
174
    isElement: function isElement(obj) {
175
      return (obj[0] || obj).nodeType;
176
    },
177
    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
178
      for (var property in configTypes) {
0 ignored issues
show
Complexity introduced by
A for in loop automatically includes the property of any prototype object, consider checking the key using hasOwnProperty.

When iterating over the keys of an object, this includes not only the keys of the object, but also keys contained in the prototype of that object. It is generally a best practice to check for these keys specifically:

var someObject;
for (var key in someObject) {
    if ( ! someObject.hasOwnProperty(key)) {
        continue; // Skip keys from the prototype.
    }

    doSomethingWith(key);
}
Loading history...
179
        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
180
          var expectedTypes = configTypes[property];
181
          var value = config[property];
182
          var valueType = value && Util.isElement(value) ? 'element' : toType(value);
183
184
          if (!new RegExp(expectedTypes).test(valueType)) {
185
            throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
186
          }
187
        }
188
      }
189
    }
190
  };
191
  setTransitionEndSupport();
192
  return Util;
193
}($);
194
195
/**
196
 * --------------------------------------------------------------------------
197
 * Bootstrap (v4.0.0): alert.js
198
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
199
 * --------------------------------------------------------------------------
200
 */
201
202
var Alert = function ($$$1) {
203
  /**
204
   * ------------------------------------------------------------------------
205
   * Constants
206
   * ------------------------------------------------------------------------
207
   */
208
  var NAME = 'alert';
209
  var VERSION = '4.0.0';
210
  var DATA_KEY = 'bs.alert';
211
  var EVENT_KEY = "." + DATA_KEY;
212
  var DATA_API_KEY = '.data-api';
213
  var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
214
  var TRANSITION_DURATION = 150;
215
  var Selector = {
216
    DISMISS: '[data-dismiss="alert"]'
217
  };
218
  var Event = {
219
    CLOSE: "close" + EVENT_KEY,
220
    CLOSED: "closed" + EVENT_KEY,
221
    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
222
  };
223
  var ClassName = {
224
    ALERT: 'alert',
225
    FADE: 'fade',
226
    SHOW: 'show'
227
    /**
228
     * ------------------------------------------------------------------------
229
     * Class Definition
230
     * ------------------------------------------------------------------------
231
     */
232
233
  };
234
235
  var Alert =
236
  /*#__PURE__*/
237
  function () {
238
    function Alert(element) {
239
      this._element = element;
240
    } // Getters
241
242
243
    var _proto = Alert.prototype;
244
245
    // Public
246
    _proto.close = function close(element) {
247
      element = element || this._element;
248
249
      var rootElement = this._getRootElement(element);
250
251
      var customEvent = this._triggerCloseEvent(rootElement);
252
253
      if (customEvent.isDefaultPrevented()) {
254
        return;
255
      }
256
257
      this._removeElement(rootElement);
258
    };
259
260
    _proto.dispose = function dispose() {
261
      $$$1.removeData(this._element, DATA_KEY);
262
      this._element = null;
263
    }; // Private
264
265
266
    _proto._getRootElement = function _getRootElement(element) {
267
      var selector = Util.getSelectorFromElement(element);
268
      var parent = false;
269
270
      if (selector) {
271
        parent = $$$1(selector)[0];
272
      }
273
274
      if (!parent) {
275
        parent = $$$1(element).closest("." + ClassName.ALERT)[0];
276
      }
277
278
      return parent;
279
    };
280
281
    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
282
      var closeEvent = $$$1.Event(Event.CLOSE);
283
      $$$1(element).trigger(closeEvent);
284
      return closeEvent;
285
    };
286
287
    _proto._removeElement = function _removeElement(element) {
288
      var _this = this;
289
290
      $$$1(element).removeClass(ClassName.SHOW);
291
292
      if (!Util.supportsTransitionEnd() || !$$$1(element).hasClass(ClassName.FADE)) {
293
        this._destroyElement(element);
294
295
        return;
296
      }
297
298
      $$$1(element).one(Util.TRANSITION_END, function (event) {
299
        return _this._destroyElement(element, event);
300
      }).emulateTransitionEnd(TRANSITION_DURATION);
301
    };
302
303
    _proto._destroyElement = function _destroyElement(element) {
304
      $$$1(element).detach().trigger(Event.CLOSED).remove();
305
    }; // Static
306
307
308
    Alert._jQueryInterface = function _jQueryInterface(config) {
309
      return this.each(function () {
310
        var $element = $$$1(this);
311
        var data = $element.data(DATA_KEY);
312
313
        if (!data) {
314
          data = new Alert(this);
315
          $element.data(DATA_KEY, data);
316
        }
317
318
        if (config === 'close') {
319
          data[config](this);
320
        }
321
      });
322
    };
323
324
    Alert._handleDismiss = function _handleDismiss(alertInstance) {
325
      return function (event) {
326
        if (event) {
327
          event.preventDefault();
328
        }
329
330
        alertInstance.close(this);
331
      };
332
    };
333
334
    _createClass(Alert, null, [{
335
      key: "VERSION",
336
      get: function get() {
337
        return VERSION;
338
      }
339
    }]);
340
    return Alert;
341
  }();
342
  /**
343
   * ------------------------------------------------------------------------
344
   * Data Api implementation
345
   * ------------------------------------------------------------------------
346
   */
347
348
349
  $$$1(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));
350
  /**
351
   * ------------------------------------------------------------------------
352
   * jQuery
353
   * ------------------------------------------------------------------------
354
   */
355
356
  $$$1.fn[NAME] = Alert._jQueryInterface;
357
  $$$1.fn[NAME].Constructor = Alert;
358
359
  $$$1.fn[NAME].noConflict = function () {
360
    $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
361
    return Alert._jQueryInterface;
362
  };
363
364
  return Alert;
365
}($);
366
367
/**
368
 * --------------------------------------------------------------------------
369
 * Bootstrap (v4.0.0): button.js
370
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
371
 * --------------------------------------------------------------------------
372
 */
373
374
var Button = function ($$$1) {
375
  /**
376
   * ------------------------------------------------------------------------
377
   * Constants
378
   * ------------------------------------------------------------------------
379
   */
380
  var NAME = 'button';
381
  var VERSION = '4.0.0';
382
  var DATA_KEY = 'bs.button';
383
  var EVENT_KEY = "." + DATA_KEY;
384
  var DATA_API_KEY = '.data-api';
385
  var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
386
  var ClassName = {
387
    ACTIVE: 'active',
388
    BUTTON: 'btn',
389
    FOCUS: 'focus'
390
  };
391
  var Selector = {
392
    DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
393
    DATA_TOGGLE: '[data-toggle="buttons"]',
394
    INPUT: 'input',
395
    ACTIVE: '.active',
396
    BUTTON: '.btn'
397
  };
398
  var Event = {
399
    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY,
400
    FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY)
401
    /**
402
     * ------------------------------------------------------------------------
403
     * Class Definition
404
     * ------------------------------------------------------------------------
405
     */
406
407
  };
408
409
  var Button =
410
  /*#__PURE__*/
411
  function () {
412
    function Button(element) {
413
      this._element = element;
414
    } // Getters
415
416
417
    var _proto = Button.prototype;
418
419
    // Public
420
    _proto.toggle = function toggle() {
421
      var triggerChangeEvent = true;
422
      var addAriaPressed = true;
423
      var rootElement = $$$1(this._element).closest(Selector.DATA_TOGGLE)[0];
424
425
      if (rootElement) {
426
        var input = $$$1(this._element).find(Selector.INPUT)[0];
427
428
        if (input) {
429
          if (input.type === 'radio') {
430
            if (input.checked && $$$1(this._element).hasClass(ClassName.ACTIVE)) {
431
              triggerChangeEvent = false;
432
            } else {
433
              var activeElement = $$$1(rootElement).find(Selector.ACTIVE)[0];
434
435
              if (activeElement) {
436
                $$$1(activeElement).removeClass(ClassName.ACTIVE);
437
              }
438
            }
439
          }
440
441
          if (triggerChangeEvent) {
442
            if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {
443
              return;
444
            }
445
446
            input.checked = !$$$1(this._element).hasClass(ClassName.ACTIVE);
447
            $$$1(input).trigger('change');
448
          }
449
450
          input.focus();
451
          addAriaPressed = false;
452
        }
453
      }
454
455
      if (addAriaPressed) {
456
        this._element.setAttribute('aria-pressed', !$$$1(this._element).hasClass(ClassName.ACTIVE));
457
      }
458
459
      if (triggerChangeEvent) {
460
        $$$1(this._element).toggleClass(ClassName.ACTIVE);
461
      }
462
    };
463
464
    _proto.dispose = function dispose() {
465
      $$$1.removeData(this._element, DATA_KEY);
466
      this._element = null;
467
    }; // Static
468
469
470
    Button._jQueryInterface = function _jQueryInterface(config) {
471
      return this.each(function () {
472
        var data = $$$1(this).data(DATA_KEY);
473
474
        if (!data) {
475
          data = new Button(this);
476
          $$$1(this).data(DATA_KEY, data);
477
        }
478
479
        if (config === 'toggle') {
480
          data[config]();
481
        }
482
      });
483
    };
484
485
    _createClass(Button, null, [{
486
      key: "VERSION",
487
      get: function get() {
488
        return VERSION;
489
      }
490
    }]);
491
    return Button;
492
  }();
493
  /**
494
   * ------------------------------------------------------------------------
495
   * Data Api implementation
496
   * ------------------------------------------------------------------------
497
   */
498
499
500
  $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
501
    event.preventDefault();
502
    var button = event.target;
503
504
    if (!$$$1(button).hasClass(ClassName.BUTTON)) {
505
      button = $$$1(button).closest(Selector.BUTTON);
506
    }
507
508
    Button._jQueryInterface.call($$$1(button), 'toggle');
509
  }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
510
    var button = $$$1(event.target).closest(Selector.BUTTON)[0];
511
    $$$1(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));
512
  });
513
  /**
514
   * ------------------------------------------------------------------------
515
   * jQuery
516
   * ------------------------------------------------------------------------
517
   */
518
519
  $$$1.fn[NAME] = Button._jQueryInterface;
520
  $$$1.fn[NAME].Constructor = Button;
521
522
  $$$1.fn[NAME].noConflict = function () {
523
    $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
524
    return Button._jQueryInterface;
525
  };
526
527
  return Button;
528
}($);
529
530
/**
531
 * --------------------------------------------------------------------------
532
 * Bootstrap (v4.0.0): carousel.js
533
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
534
 * --------------------------------------------------------------------------
535
 */
536
537
var Carousel = function ($$$1) {
538
  /**
539
   * ------------------------------------------------------------------------
540
   * Constants
541
   * ------------------------------------------------------------------------
542
   */
543
  var NAME = 'carousel';
544
  var VERSION = '4.0.0';
545
  var DATA_KEY = 'bs.carousel';
546
  var EVENT_KEY = "." + DATA_KEY;
547
  var DATA_API_KEY = '.data-api';
548
  var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
549
  var TRANSITION_DURATION = 600;
550
  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
551
552
  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
553
554
  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
555
556
  var Default = {
557
    interval: 5000,
558
    keyboard: true,
559
    slide: false,
560
    pause: 'hover',
561
    wrap: true
562
  };
563
  var DefaultType = {
564
    interval: '(number|boolean)',
565
    keyboard: 'boolean',
566
    slide: '(boolean|string)',
567
    pause: '(string|boolean)',
568
    wrap: 'boolean'
569
  };
570
  var Direction = {
571
    NEXT: 'next',
572
    PREV: 'prev',
573
    LEFT: 'left',
574
    RIGHT: 'right'
575
  };
576
  var Event = {
577
    SLIDE: "slide" + EVENT_KEY,
578
    SLID: "slid" + EVENT_KEY,
579
    KEYDOWN: "keydown" + EVENT_KEY,
580
    MOUSEENTER: "mouseenter" + EVENT_KEY,
581
    MOUSELEAVE: "mouseleave" + EVENT_KEY,
582
    TOUCHEND: "touchend" + EVENT_KEY,
583
    LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY,
584
    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
585
  };
586
  var ClassName = {
587
    CAROUSEL: 'carousel',
588
    ACTIVE: 'active',
589
    SLIDE: 'slide',
590
    RIGHT: 'carousel-item-right',
591
    LEFT: 'carousel-item-left',
592
    NEXT: 'carousel-item-next',
593
    PREV: 'carousel-item-prev',
594
    ITEM: 'carousel-item'
595
  };
596
  var Selector = {
597
    ACTIVE: '.active',
598
    ACTIVE_ITEM: '.active.carousel-item',
599
    ITEM: '.carousel-item',
600
    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',
601
    INDICATORS: '.carousel-indicators',
602
    DATA_SLIDE: '[data-slide], [data-slide-to]',
603
    DATA_RIDE: '[data-ride="carousel"]'
604
    /**
605
     * ------------------------------------------------------------------------
606
     * Class Definition
607
     * ------------------------------------------------------------------------
608
     */
609
610
  };
611
612
  var Carousel =
613
  /*#__PURE__*/
614
  function () {
615
    function Carousel(element, config) {
616
      this._items = null;
617
      this._interval = null;
618
      this._activeElement = null;
619
      this._isPaused = false;
620
      this._isSliding = false;
621
      this.touchTimeout = null;
622
      this._config = this._getConfig(config);
623
      this._element = $$$1(element)[0];
624
      this._indicatorsElement = $$$1(this._element).find(Selector.INDICATORS)[0];
625
626
      this._addEventListeners();
627
    } // Getters
628
629
630
    var _proto = Carousel.prototype;
631
632
    // Public
633
    _proto.next = function next() {
634
      if (!this._isSliding) {
635
        this._slide(Direction.NEXT);
636
      }
637
    };
638
639
    _proto.nextWhenVisible = function nextWhenVisible() {
640
      // Don't call next when the page isn't visible
641
      // or the carousel or its parent isn't visible
642
      if (!document.hidden && $$$1(this._element).is(':visible') && $$$1(this._element).css('visibility') !== 'hidden') {
643
        this.next();
644
      }
645
    };
646
647
    _proto.prev = function prev() {
648
      if (!this._isSliding) {
649
        this._slide(Direction.PREV);
650
      }
651
    };
652
653
    _proto.pause = function pause(event) {
654
      if (!event) {
655
        this._isPaused = true;
656
      }
657
658
      if ($$$1(this._element).find(Selector.NEXT_PREV)[0] && Util.supportsTransitionEnd()) {
659
        Util.triggerTransitionEnd(this._element);
660
        this.cycle(true);
661
      }
662
663
      clearInterval(this._interval);
664
      this._interval = null;
665
    };
666
667
    _proto.cycle = function cycle(event) {
668
      if (!event) {
669
        this._isPaused = false;
670
      }
671
672
      if (this._interval) {
673
        clearInterval(this._interval);
674
        this._interval = null;
675
      }
676
677
      if (this._config.interval && !this._isPaused) {
678
        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
679
      }
680
    };
681
682
    _proto.to = function to(index) {
683
      var _this = this;
684
685
      this._activeElement = $$$1(this._element).find(Selector.ACTIVE_ITEM)[0];
686
687
      var activeIndex = this._getItemIndex(this._activeElement);
688
689
      if (index > this._items.length - 1 || index < 0) {
690
        return;
691
      }
692
693
      if (this._isSliding) {
694
        $$$1(this._element).one(Event.SLID, function () {
695
          return _this.to(index);
696
        });
697
        return;
698
      }
699
700
      if (activeIndex === index) {
701
        this.pause();
702
        this.cycle();
703
        return;
704
      }
705
706
      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;
707
708
      this._slide(direction, this._items[index]);
709
    };
710
711
    _proto.dispose = function dispose() {
712
      $$$1(this._element).off(EVENT_KEY);
713
      $$$1.removeData(this._element, DATA_KEY);
714
      this._items = null;
715
      this._config = null;
716
      this._element = null;
717
      this._interval = null;
718
      this._isPaused = null;
719
      this._isSliding = null;
720
      this._activeElement = null;
721
      this._indicatorsElement = null;
722
    }; // Private
723
724
725
    _proto._getConfig = function _getConfig(config) {
726
      config = _extends({}, Default, config);
727
      Util.typeCheckConfig(NAME, config, DefaultType);
728
      return config;
729
    };
730
731
    _proto._addEventListeners = function _addEventListeners() {
732
      var _this2 = this;
733
734
      if (this._config.keyboard) {
735
        $$$1(this._element).on(Event.KEYDOWN, function (event) {
736
          return _this2._keydown(event);
737
        });
738
      }
739
740
      if (this._config.pause === 'hover') {
741
        $$$1(this._element).on(Event.MOUSEENTER, function (event) {
742
          return _this2.pause(event);
743
        }).on(Event.MOUSELEAVE, function (event) {
744
          return _this2.cycle(event);
745
        });
746
747
        if ('ontouchstart' in document.documentElement) {
748
          // If it's a touch-enabled device, mouseenter/leave are fired as
749
          // part of the mouse compatibility events on first tap - the carousel
750
          // would stop cycling until user tapped out of it;
751
          // here, we listen for touchend, explicitly pause the carousel
752
          // (as if it's the second time we tap on it, mouseenter compat event
753
          // is NOT fired) and after a timeout (to allow for mouse compatibility
754
          // events to fire) we explicitly restart cycling
755
          $$$1(this._element).on(Event.TOUCHEND, function () {
756
            _this2.pause();
757
758
            if (_this2.touchTimeout) {
759
              clearTimeout(_this2.touchTimeout);
760
            }
761
762
            _this2.touchTimeout = setTimeout(function (event) {
763
              return _this2.cycle(event);
764
            }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval);
765
          });
766
        }
767
      }
768
    };
769
770
    _proto._keydown = function _keydown(event) {
771
      if (/input|textarea/i.test(event.target.tagName)) {
772
        return;
773
      }
774
775
      switch (event.which) {
776
        case ARROW_LEFT_KEYCODE:
777
          event.preventDefault();
778
          this.prev();
779
          break;
780
781
        case ARROW_RIGHT_KEYCODE:
782
          event.preventDefault();
783
          this.next();
784
          break;
785
786
        default:
787
      }
788
    };
789
790
    _proto._getItemIndex = function _getItemIndex(element) {
791
      this._items = $$$1.makeArray($$$1(element).parent().find(Selector.ITEM));
792
      return this._items.indexOf(element);
793
    };
794
795
    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
796
      var isNextDirection = direction === Direction.NEXT;
797
      var isPrevDirection = direction === Direction.PREV;
798
799
      var activeIndex = this._getItemIndex(activeElement);
800
801
      var lastItemIndex = this._items.length - 1;
802
      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
803
804
      if (isGoingToWrap && !this._config.wrap) {
805
        return activeElement;
806
      }
807
808
      var delta = direction === Direction.PREV ? -1 : 1;
809
      var itemIndex = (activeIndex + delta) % this._items.length;
810
      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
811
    };
812
813
    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
814
      var targetIndex = this._getItemIndex(relatedTarget);
815
816
      var fromIndex = this._getItemIndex($$$1(this._element).find(Selector.ACTIVE_ITEM)[0]);
817
818
      var slideEvent = $$$1.Event(Event.SLIDE, {
819
        relatedTarget: relatedTarget,
820
        direction: eventDirectionName,
821
        from: fromIndex,
822
        to: targetIndex
823
      });
824
      $$$1(this._element).trigger(slideEvent);
825
      return slideEvent;
826
    };
827
828
    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
829
      if (this._indicatorsElement) {
830
        $$$1(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE);
831
832
        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
833
834
        if (nextIndicator) {
835
          $$$1(nextIndicator).addClass(ClassName.ACTIVE);
836
        }
837
      }
838
    };
839
840
    _proto._slide = function _slide(direction, element) {
841
      var _this3 = this;
842
843
      var activeElement = $$$1(this._element).find(Selector.ACTIVE_ITEM)[0];
844
845
      var activeElementIndex = this._getItemIndex(activeElement);
846
847
      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
848
849
      var nextElementIndex = this._getItemIndex(nextElement);
850
851
      var isCycling = Boolean(this._interval);
852
      var directionalClassName;
853
      var orderClassName;
854
      var eventDirectionName;
855
856
      if (direction === Direction.NEXT) {
857
        directionalClassName = ClassName.LEFT;
858
        orderClassName = ClassName.NEXT;
859
        eventDirectionName = Direction.LEFT;
860
      } else {
861
        directionalClassName = ClassName.RIGHT;
862
        orderClassName = ClassName.PREV;
863
        eventDirectionName = Direction.RIGHT;
864
      }
865
866
      if (nextElement && $$$1(nextElement).hasClass(ClassName.ACTIVE)) {
867
        this._isSliding = false;
868
        return;
869
      }
870
871
      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
872
873
      if (slideEvent.isDefaultPrevented()) {
874
        return;
875
      }
876
877
      if (!activeElement || !nextElement) {
878
        // Some weirdness is happening, so we bail
879
        return;
880
      }
881
882
      this._isSliding = true;
883
884
      if (isCycling) {
885
        this.pause();
886
      }
887
888
      this._setActiveIndicatorElement(nextElement);
889
890
      var slidEvent = $$$1.Event(Event.SLID, {
891
        relatedTarget: nextElement,
892
        direction: eventDirectionName,
893
        from: activeElementIndex,
894
        to: nextElementIndex
895
      });
896
897
      if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.SLIDE)) {
898
        $$$1(nextElement).addClass(orderClassName);
899
        Util.reflow(nextElement);
900
        $$$1(activeElement).addClass(directionalClassName);
901
        $$$1(nextElement).addClass(directionalClassName);
902
        $$$1(activeElement).one(Util.TRANSITION_END, function () {
903
          $$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE);
904
          $$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName);
905
          _this3._isSliding = false;
906
          setTimeout(function () {
907
            return $$$1(_this3._element).trigger(slidEvent);
908
          }, 0);
909
        }).emulateTransitionEnd(TRANSITION_DURATION);
910
      } else {
911
        $$$1(activeElement).removeClass(ClassName.ACTIVE);
912
        $$$1(nextElement).addClass(ClassName.ACTIVE);
913
        this._isSliding = false;
914
        $$$1(this._element).trigger(slidEvent);
915
      }
916
917
      if (isCycling) {
918
        this.cycle();
919
      }
920
    }; // Static
921
922
923
    Carousel._jQueryInterface = function _jQueryInterface(config) {
924
      return this.each(function () {
925
        var data = $$$1(this).data(DATA_KEY);
926
927
        var _config = _extends({}, Default, $$$1(this).data());
928
929
        if (typeof config === 'object') {
930
          _config = _extends({}, _config, config);
931
        }
932
933
        var action = typeof config === 'string' ? config : _config.slide;
934
935
        if (!data) {
936
          data = new Carousel(this, _config);
937
          $$$1(this).data(DATA_KEY, data);
938
        }
939
940
        if (typeof config === 'number') {
941
          data.to(config);
942
        } else if (typeof action === 'string') {
943
          if (typeof data[action] === 'undefined') {
944
            throw new TypeError("No method named \"" + action + "\"");
945
          }
946
947
          data[action]();
948
        } else if (_config.interval) {
949
          data.pause();
950
          data.cycle();
951
        }
952
      });
953
    };
954
955
    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {
956
      var selector = Util.getSelectorFromElement(this);
957
958
      if (!selector) {
959
        return;
960
      }
961
962
      var target = $$$1(selector)[0];
963
964
      if (!target || !$$$1(target).hasClass(ClassName.CAROUSEL)) {
965
        return;
966
      }
967
968
      var config = _extends({}, $$$1(target).data(), $$$1(this).data());
969
      var slideIndex = this.getAttribute('data-slide-to');
970
971
      if (slideIndex) {
972
        config.interval = false;
973
      }
974
975
      Carousel._jQueryInterface.call($$$1(target), config);
976
977
      if (slideIndex) {
978
        $$$1(target).data(DATA_KEY).to(slideIndex);
979
      }
980
981
      event.preventDefault();
982
    };
983
984
    _createClass(Carousel, null, [{
985
      key: "VERSION",
986
      get: function get() {
987
        return VERSION;
988
      }
989
    }, {
990
      key: "Default",
991
      get: function get() {
992
        return Default;
993
      }
994
    }]);
995
    return Carousel;
996
  }();
997
  /**
998
   * ------------------------------------------------------------------------
999
   * Data Api implementation
1000
   * ------------------------------------------------------------------------
1001
   */
1002
1003
1004
  $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler);
1005
  $$$1(window).on(Event.LOAD_DATA_API, function () {
1006
    $$$1(Selector.DATA_RIDE).each(function () {
1007
      var $carousel = $$$1(this);
1008
1009
      Carousel._jQueryInterface.call($carousel, $carousel.data());
1010
    });
1011
  });
1012
  /**
1013
   * ------------------------------------------------------------------------
1014
   * jQuery
1015
   * ------------------------------------------------------------------------
1016
   */
1017
1018
  $$$1.fn[NAME] = Carousel._jQueryInterface;
1019
  $$$1.fn[NAME].Constructor = Carousel;
1020
1021
  $$$1.fn[NAME].noConflict = function () {
1022
    $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
1023
    return Carousel._jQueryInterface;
1024
  };
1025
1026
  return Carousel;
1027
}($);
1028
1029
/**
1030
 * --------------------------------------------------------------------------
1031
 * Bootstrap (v4.0.0): collapse.js
1032
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1033
 * --------------------------------------------------------------------------
1034
 */
1035
1036
var Collapse = function ($$$1) {
1037
  /**
1038
   * ------------------------------------------------------------------------
1039
   * Constants
1040
   * ------------------------------------------------------------------------
1041
   */
1042
  var NAME = 'collapse';
1043
  var VERSION = '4.0.0';
1044
  var DATA_KEY = 'bs.collapse';
1045
  var EVENT_KEY = "." + DATA_KEY;
1046
  var DATA_API_KEY = '.data-api';
1047
  var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
1048
  var TRANSITION_DURATION = 600;
1049
  var Default = {
1050
    toggle: true,
1051
    parent: ''
1052
  };
1053
  var DefaultType = {
1054
    toggle: 'boolean',
1055
    parent: '(string|element)'
1056
  };
1057
  var Event = {
1058
    SHOW: "show" + EVENT_KEY,
1059
    SHOWN: "shown" + EVENT_KEY,
1060
    HIDE: "hide" + EVENT_KEY,
1061
    HIDDEN: "hidden" + EVENT_KEY,
1062
    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
1063
  };
1064
  var ClassName = {
1065
    SHOW: 'show',
1066
    COLLAPSE: 'collapse',
1067
    COLLAPSING: 'collapsing',
1068
    COLLAPSED: 'collapsed'
1069
  };
1070
  var Dimension = {
1071
    WIDTH: 'width',
1072
    HEIGHT: 'height'
1073
  };
1074
  var Selector = {
1075
    ACTIVES: '.show, .collapsing',
1076
    DATA_TOGGLE: '[data-toggle="collapse"]'
1077
    /**
1078
     * ------------------------------------------------------------------------
1079
     * Class Definition
1080
     * ------------------------------------------------------------------------
1081
     */
1082
1083
  };
1084
1085
  var Collapse =
1086
  /*#__PURE__*/
1087
  function () {
1088
    function Collapse(element, config) {
1089
      this._isTransitioning = false;
1090
      this._element = element;
1091
      this._config = this._getConfig(config);
1092
      this._triggerArray = $$$1.makeArray($$$1("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
1093
      var tabToggles = $$$1(Selector.DATA_TOGGLE);
1094
1095
      for (var i = 0; i < tabToggles.length; i++) {
1096
        var elem = tabToggles[i];
1097
        var selector = Util.getSelectorFromElement(elem);
1098
1099
        if (selector !== null && $$$1(selector).filter(element).length > 0) {
1100
          this._selector = selector;
1101
1102
          this._triggerArray.push(elem);
1103
        }
1104
      }
1105
1106
      this._parent = this._config.parent ? this._getParent() : null;
1107
1108
      if (!this._config.parent) {
1109
        this._addAriaAndCollapsedClass(this._element, this._triggerArray);
1110
      }
1111
1112
      if (this._config.toggle) {
1113
        this.toggle();
1114
      }
1115
    } // Getters
1116
1117
1118
    var _proto = Collapse.prototype;
1119
1120
    // Public
1121
    _proto.toggle = function toggle() {
1122
      if ($$$1(this._element).hasClass(ClassName.SHOW)) {
1123
        this.hide();
1124
      } else {
1125
        this.show();
1126
      }
1127
    };
1128
1129
    _proto.show = function show() {
1130
      var _this = this;
1131
1132
      if (this._isTransitioning || $$$1(this._element).hasClass(ClassName.SHOW)) {
1133
        return;
1134
      }
1135
1136
      var actives;
1137
      var activesData;
1138
1139
      if (this._parent) {
1140
        actives = $$$1.makeArray($$$1(this._parent).find(Selector.ACTIVES).filter("[data-parent=\"" + this._config.parent + "\"]"));
1141
1142
        if (actives.length === 0) {
1143
          actives = null;
1144
        }
1145
      }
1146
1147
      if (actives) {
1148
        activesData = $$$1(actives).not(this._selector).data(DATA_KEY);
1149
1150
        if (activesData && activesData._isTransitioning) {
1151
          return;
1152
        }
1153
      }
1154
1155
      var startEvent = $$$1.Event(Event.SHOW);
1156
      $$$1(this._element).trigger(startEvent);
1157
1158
      if (startEvent.isDefaultPrevented()) {
1159
        return;
1160
      }
1161
1162
      if (actives) {
1163
        Collapse._jQueryInterface.call($$$1(actives).not(this._selector), 'hide');
1164
1165
        if (!activesData) {
1166
          $$$1(actives).data(DATA_KEY, null);
1167
        }
1168
      }
1169
1170
      var dimension = this._getDimension();
1171
1172
      $$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);
1173
      this._element.style[dimension] = 0;
1174
1175
      if (this._triggerArray.length > 0) {
1176
        $$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);
1177
      }
1178
1179
      this.setTransitioning(true);
1180
1181
      var complete = function complete() {
0 ignored issues
show
Comprehensibility Naming Best Practice introduced by
The variable complete already seems to be declared on line 1181. Consider using another variable name or omitting the var keyword.

This check looks for variables that are declared in multiple lines. There may be several reasons for this.

In the simplest case the variable name was reused by mistake. This may lead to very hard to locate bugs.

If you want to reuse a variable for another purpose, consider declaring it at or near the top of your function and just assigning to it subsequently so it is always declared.

Loading history...
1182
        $$$1(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);
1183
        _this._element.style[dimension] = '';
1184
1185
        _this.setTransitioning(false);
1186
1187
        $$$1(_this._element).trigger(Event.SHOWN);
1188
      };
1189
1190
      if (!Util.supportsTransitionEnd()) {
1191
        complete();
1192
        return;
1193
      }
1194
1195
      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
1196
      var scrollSize = "scroll" + capitalizedDimension;
1197
      $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
1198
      this._element.style[dimension] = this._element[scrollSize] + "px";
1199
    };
1200
1201
    _proto.hide = function hide() {
1202
      var _this2 = this;
1203
1204
      if (this._isTransitioning || !$$$1(this._element).hasClass(ClassName.SHOW)) {
1205
        return;
1206
      }
1207
1208
      var startEvent = $$$1.Event(Event.HIDE);
1209
      $$$1(this._element).trigger(startEvent);
1210
1211
      if (startEvent.isDefaultPrevented()) {
1212
        return;
1213
      }
1214
1215
      var dimension = this._getDimension();
1216
1217
      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
1218
      Util.reflow(this._element);
1219
      $$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);
1220
1221
      if (this._triggerArray.length > 0) {
1222
        for (var i = 0; i < this._triggerArray.length; i++) {
1223
          var trigger = this._triggerArray[i];
1224
          var selector = Util.getSelectorFromElement(trigger);
1225
1226
          if (selector !== null) {
1227
            var $elem = $$$1(selector);
1228
1229
            if (!$elem.hasClass(ClassName.SHOW)) {
1230
              $$$1(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);
1231
            }
1232
          }
1233
        }
1234
      }
1235
1236
      this.setTransitioning(true);
1237
1238
      var complete = function complete() {
0 ignored issues
show
Comprehensibility Naming Best Practice introduced by
The variable complete already seems to be declared on line 1238. Consider using another variable name or omitting the var keyword.

This check looks for variables that are declared in multiple lines. There may be several reasons for this.

In the simplest case the variable name was reused by mistake. This may lead to very hard to locate bugs.

If you want to reuse a variable for another purpose, consider declaring it at or near the top of your function and just assigning to it subsequently so it is always declared.

Loading history...
1239
        _this2.setTransitioning(false);
1240
1241
        $$$1(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);
1242
      };
1243
1244
      this._element.style[dimension] = '';
1245
1246
      if (!Util.supportsTransitionEnd()) {
1247
        complete();
1248
        return;
1249
      }
1250
1251
      $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
1252
    };
1253
1254
    _proto.setTransitioning = function setTransitioning(isTransitioning) {
1255
      this._isTransitioning = isTransitioning;
1256
    };
1257
1258
    _proto.dispose = function dispose() {
1259
      $$$1.removeData(this._element, DATA_KEY);
1260
      this._config = null;
1261
      this._parent = null;
1262
      this._element = null;
1263
      this._triggerArray = null;
1264
      this._isTransitioning = null;
1265
    }; // Private
1266
1267
1268
    _proto._getConfig = function _getConfig(config) {
1269
      config = _extends({}, Default, config);
1270
      config.toggle = Boolean(config.toggle); // Coerce string values
1271
1272
      Util.typeCheckConfig(NAME, config, DefaultType);
1273
      return config;
1274
    };
1275
1276
    _proto._getDimension = function _getDimension() {
1277
      var hasWidth = $$$1(this._element).hasClass(Dimension.WIDTH);
1278
      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
1279
    };
1280
1281
    _proto._getParent = function _getParent() {
1282
      var _this3 = this;
1283
1284
      var parent = null;
1285
1286
      if (Util.isElement(this._config.parent)) {
1287
        parent = this._config.parent; // It's a jQuery object
1288
1289
        if (typeof this._config.parent.jquery !== 'undefined') {
1290
          parent = this._config.parent[0];
1291
        }
1292
      } else {
1293
        parent = $$$1(this._config.parent)[0];
1294
      }
1295
1296
      var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
1297
      $$$1(parent).find(selector).each(function (i, element) {
1298
        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
1299
      });
1300
      return parent;
1301
    };
1302
1303
    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
1304
      if (element) {
1305
        var isOpen = $$$1(element).hasClass(ClassName.SHOW);
1306
1307
        if (triggerArray.length > 0) {
1308
          $$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
1309
        }
1310
      }
1311
    }; // Static
1312
1313
1314
    Collapse._getTargetFromElement = function _getTargetFromElement(element) {
1315
      var selector = Util.getSelectorFromElement(element);
1316
      return selector ? $$$1(selector)[0] : null;
1317
    };
1318
1319
    Collapse._jQueryInterface = function _jQueryInterface(config) {
1320
      return this.each(function () {
1321
        var $this = $$$1(this);
1322
        var data = $this.data(DATA_KEY);
1323
1324
        var _config = _extends({}, Default, $this.data(), typeof config === 'object' && config);
1325
1326
        if (!data && _config.toggle && /show|hide/.test(config)) {
1327
          _config.toggle = false;
1328
        }
1329
1330
        if (!data) {
1331
          data = new Collapse(this, _config);
1332
          $this.data(DATA_KEY, data);
1333
        }
1334
1335
        if (typeof config === 'string') {
1336
          if (typeof data[config] === 'undefined') {
1337
            throw new TypeError("No method named \"" + config + "\"");
1338
          }
1339
1340
          data[config]();
1341
        }
1342
      });
1343
    };
1344
1345
    _createClass(Collapse, null, [{
1346
      key: "VERSION",
1347
      get: function get() {
1348
        return VERSION;
1349
      }
1350
    }, {
1351
      key: "Default",
1352
      get: function get() {
1353
        return Default;
1354
      }
1355
    }]);
1356
    return Collapse;
1357
  }();
1358
  /**
1359
   * ------------------------------------------------------------------------
1360
   * Data Api implementation
1361
   * ------------------------------------------------------------------------
1362
   */
1363
1364
1365
  $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
1366
    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
1367
    if (event.currentTarget.tagName === 'A') {
1368
      event.preventDefault();
1369
    }
1370
1371
    var $trigger = $$$1(this);
1372
    var selector = Util.getSelectorFromElement(this);
1373
    $$$1(selector).each(function () {
1374
      var $target = $$$1(this);
1375
      var data = $target.data(DATA_KEY);
1376
      var config = data ? 'toggle' : $trigger.data();
1377
1378
      Collapse._jQueryInterface.call($target, config);
1379
    });
1380
  });
1381
  /**
1382
   * ------------------------------------------------------------------------
1383
   * jQuery
1384
   * ------------------------------------------------------------------------
1385
   */
1386
1387
  $$$1.fn[NAME] = Collapse._jQueryInterface;
1388
  $$$1.fn[NAME].Constructor = Collapse;
1389
1390
  $$$1.fn[NAME].noConflict = function () {
1391
    $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
1392
    return Collapse._jQueryInterface;
1393
  };
1394
1395
  return Collapse;
1396
}($);
1397
1398
/**
1399
 * --------------------------------------------------------------------------
1400
 * Bootstrap (v4.0.0): dropdown.js
1401
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1402
 * --------------------------------------------------------------------------
1403
 */
1404
1405
var Dropdown = function ($$$1) {
1406
  /**
1407
   * ------------------------------------------------------------------------
1408
   * Constants
1409
   * ------------------------------------------------------------------------
1410
   */
1411
  var NAME = 'dropdown';
1412
  var VERSION = '4.0.0';
1413
  var DATA_KEY = 'bs.dropdown';
1414
  var EVENT_KEY = "." + DATA_KEY;
1415
  var DATA_API_KEY = '.data-api';
1416
  var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
1417
  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
1418
1419
  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
1420
1421
  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
1422
1423
  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
1424
1425
  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
1426
1427
  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
1428
1429
  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
1430
  var Event = {
1431
    HIDE: "hide" + EVENT_KEY,
1432
    HIDDEN: "hidden" + EVENT_KEY,
1433
    SHOW: "show" + EVENT_KEY,
1434
    SHOWN: "shown" + EVENT_KEY,
1435
    CLICK: "click" + EVENT_KEY,
1436
    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY,
1437
    KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY,
1438
    KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY
1439
  };
1440
  var ClassName = {
1441
    DISABLED: 'disabled',
1442
    SHOW: 'show',
1443
    DROPUP: 'dropup',
1444
    DROPRIGHT: 'dropright',
1445
    DROPLEFT: 'dropleft',
1446
    MENURIGHT: 'dropdown-menu-right',
1447
    MENULEFT: 'dropdown-menu-left',
1448
    POSITION_STATIC: 'position-static'
1449
  };
1450
  var Selector = {
1451
    DATA_TOGGLE: '[data-toggle="dropdown"]',
1452
    FORM_CHILD: '.dropdown form',
1453
    MENU: '.dropdown-menu',
1454
    NAVBAR_NAV: '.navbar-nav',
1455
    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled)'
1456
  };
1457
  var AttachmentMap = {
1458
    TOP: 'top-start',
1459
    TOPEND: 'top-end',
1460
    BOTTOM: 'bottom-start',
1461
    BOTTOMEND: 'bottom-end',
1462
    RIGHT: 'right-start',
1463
    RIGHTEND: 'right-end',
1464
    LEFT: 'left-start',
1465
    LEFTEND: 'left-end'
1466
  };
1467
  var Default = {
1468
    offset: 0,
1469
    flip: true,
1470
    boundary: 'scrollParent'
1471
  };
1472
  var DefaultType = {
1473
    offset: '(number|string|function)',
1474
    flip: 'boolean',
1475
    boundary: '(string|element)'
1476
    /**
1477
     * ------------------------------------------------------------------------
1478
     * Class Definition
1479
     * ------------------------------------------------------------------------
1480
     */
1481
1482
  };
1483
1484
  var Dropdown =
1485
  /*#__PURE__*/
1486
  function () {
1487
    function Dropdown(element, config) {
1488
      this._element = element;
1489
      this._popper = null;
1490
      this._config = this._getConfig(config);
1491
      this._menu = this._getMenuElement();
1492
      this._inNavbar = this._detectNavbar();
1493
1494
      this._addEventListeners();
1495
    } // Getters
1496
1497
1498
    var _proto = Dropdown.prototype;
1499
1500
    // Public
1501
    _proto.toggle = function toggle() {
1502
      if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) {
1503
        return;
1504
      }
1505
1506
      var parent = Dropdown._getParentFromElement(this._element);
1507
1508
      var isActive = $$$1(this._menu).hasClass(ClassName.SHOW);
1509
1510
      Dropdown._clearMenus();
1511
1512
      if (isActive) {
1513
        return;
1514
      }
1515
1516
      var relatedTarget = {
1517
        relatedTarget: this._element
1518
      };
1519
      var showEvent = $$$1.Event(Event.SHOW, relatedTarget);
1520
      $$$1(parent).trigger(showEvent);
1521
1522
      if (showEvent.isDefaultPrevented()) {
1523
        return;
1524
      } // Disable totally Popper.js for Dropdown in Navbar
1525
1526
1527
      if (!this._inNavbar) {
1528
        /**
1529
         * Check for Popper dependency
1530
         * Popper - https://popper.js.org
1531
         */
1532
        if (typeof Popper === 'undefined') {
1533
          throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)');
1534
        }
1535
1536
        var element = this._element; // For dropup with alignment we use the parent as popper container
1537
1538
        if ($$$1(parent).hasClass(ClassName.DROPUP)) {
1539
          if ($$$1(this._menu).hasClass(ClassName.MENULEFT) || $$$1(this._menu).hasClass(ClassName.MENURIGHT)) {
1540
            element = parent;
1541
          }
1542
        } // If boundary is not `scrollParent`, then set position to `static`
1543
        // to allow the menu to "escape" the scroll parent's boundaries
1544
        // https://github.com/twbs/bootstrap/issues/24251
1545
1546
1547
        if (this._config.boundary !== 'scrollParent') {
1548
          $$$1(parent).addClass(ClassName.POSITION_STATIC);
1549
        }
1550
1551
        this._popper = new Popper(element, this._menu, this._getPopperConfig());
1552
      } // If this is a touch-enabled device we add extra
1553
      // empty mouseover listeners to the body's immediate children;
1554
      // only needed because of broken event delegation on iOS
1555
      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
1556
1557
1558
      if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) {
1559
        $$$1('body').children().on('mouseover', null, $$$1.noop);
1560
      }
1561
1562
      this._element.focus();
1563
1564
      this._element.setAttribute('aria-expanded', true);
1565
1566
      $$$1(this._menu).toggleClass(ClassName.SHOW);
1567
      $$$1(parent).toggleClass(ClassName.SHOW).trigger($$$1.Event(Event.SHOWN, relatedTarget));
1568
    };
1569
1570
    _proto.dispose = function dispose() {
1571
      $$$1.removeData(this._element, DATA_KEY);
1572
      $$$1(this._element).off(EVENT_KEY);
1573
      this._element = null;
1574
      this._menu = null;
1575
1576
      if (this._popper !== null) {
1577
        this._popper.destroy();
1578
1579
        this._popper = null;
1580
      }
1581
    };
1582
1583
    _proto.update = function update() {
1584
      this._inNavbar = this._detectNavbar();
1585
1586
      if (this._popper !== null) {
1587
        this._popper.scheduleUpdate();
1588
      }
1589
    }; // Private
1590
1591
1592
    _proto._addEventListeners = function _addEventListeners() {
1593
      var _this = this;
1594
1595
      $$$1(this._element).on(Event.CLICK, function (event) {
1596
        event.preventDefault();
1597
        event.stopPropagation();
1598
1599
        _this.toggle();
1600
      });
1601
    };
1602
1603
    _proto._getConfig = function _getConfig(config) {
1604
      config = _extends({}, this.constructor.Default, $$$1(this._element).data(), config);
1605
      Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
1606
      return config;
1607
    };
1608
1609
    _proto._getMenuElement = function _getMenuElement() {
1610
      if (!this._menu) {
1611
        var parent = Dropdown._getParentFromElement(this._element);
1612
1613
        this._menu = $$$1(parent).find(Selector.MENU)[0];
1614
      }
1615
1616
      return this._menu;
1617
    };
1618
1619
    _proto._getPlacement = function _getPlacement() {
1620
      var $parentDropdown = $$$1(this._element).parent();
1621
      var placement = AttachmentMap.BOTTOM; // Handle dropup
1622
1623
      if ($parentDropdown.hasClass(ClassName.DROPUP)) {
1624
        placement = AttachmentMap.TOP;
1625
1626
        if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) {
1627
          placement = AttachmentMap.TOPEND;
1628
        }
1629
      } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {
1630
        placement = AttachmentMap.RIGHT;
1631
      } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {
1632
        placement = AttachmentMap.LEFT;
1633
      } else if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) {
1634
        placement = AttachmentMap.BOTTOMEND;
1635
      }
1636
1637
      return placement;
1638
    };
1639
1640
    _proto._detectNavbar = function _detectNavbar() {
1641
      return $$$1(this._element).closest('.navbar').length > 0;
1642
    };
1643
1644
    _proto._getPopperConfig = function _getPopperConfig() {
1645
      var _this2 = this;
1646
1647
      var offsetConf = {};
1648
1649
      if (typeof this._config.offset === 'function') {
1650
        offsetConf.fn = function (data) {
1651
          data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets) || {});
1652
          return data;
1653
        };
1654
      } else {
1655
        offsetConf.offset = this._config.offset;
1656
      }
1657
1658
      var popperConfig = {
1659
        placement: this._getPlacement(),
1660
        modifiers: {
1661
          offset: offsetConf,
1662
          flip: {
1663
            enabled: this._config.flip
1664
          },
1665
          preventOverflow: {
1666
            boundariesElement: this._config.boundary
1667
          }
1668
        }
1669
      };
1670
      return popperConfig;
1671
    }; // Static
1672
1673
1674
    Dropdown._jQueryInterface = function _jQueryInterface(config) {
1675
      return this.each(function () {
1676
        var data = $$$1(this).data(DATA_KEY);
1677
1678
        var _config = typeof config === 'object' ? config : null;
1679
1680
        if (!data) {
1681
          data = new Dropdown(this, _config);
1682
          $$$1(this).data(DATA_KEY, data);
1683
        }
1684
1685
        if (typeof config === 'string') {
1686
          if (typeof data[config] === 'undefined') {
1687
            throw new TypeError("No method named \"" + config + "\"");
1688
          }
1689
1690
          data[config]();
1691
        }
1692
      });
1693
    };
1694
1695
    Dropdown._clearMenus = function _clearMenus(event) {
1696
      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
1697
        return;
1698
      }
1699
1700
      var toggles = $$$1.makeArray($$$1(Selector.DATA_TOGGLE));
1701
1702
      for (var i = 0; i < toggles.length; i++) {
1703
        var parent = Dropdown._getParentFromElement(toggles[i]);
1704
1705
        var context = $$$1(toggles[i]).data(DATA_KEY);
1706
        var relatedTarget = {
1707
          relatedTarget: toggles[i]
1708
        };
1709
1710
        if (!context) {
1711
          continue;
1712
        }
1713
1714
        var dropdownMenu = context._menu;
1715
1716
        if (!$$$1(parent).hasClass(ClassName.SHOW)) {
1717
          continue;
1718
        }
1719
1720
        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $$$1.contains(parent, event.target)) {
1721
          continue;
1722
        }
1723
1724
        var hideEvent = $$$1.Event(Event.HIDE, relatedTarget);
1725
        $$$1(parent).trigger(hideEvent);
1726
1727
        if (hideEvent.isDefaultPrevented()) {
1728
          continue;
1729
        } // If this is a touch-enabled device we remove the extra
1730
        // empty mouseover listeners we added for iOS support
1731
1732
1733
        if ('ontouchstart' in document.documentElement) {
1734
          $$$1('body').children().off('mouseover', null, $$$1.noop);
1735
        }
1736
1737
        toggles[i].setAttribute('aria-expanded', 'false');
1738
        $$$1(dropdownMenu).removeClass(ClassName.SHOW);
1739
        $$$1(parent).removeClass(ClassName.SHOW).trigger($$$1.Event(Event.HIDDEN, relatedTarget));
1740
      }
1741
    };
1742
1743
    Dropdown._getParentFromElement = function _getParentFromElement(element) {
1744
      var parent;
1745
      var selector = Util.getSelectorFromElement(element);
1746
1747
      if (selector) {
1748
        parent = $$$1(selector)[0];
1749
      }
1750
1751
      return parent || element.parentNode;
1752
    }; // eslint-disable-next-line complexity
1753
1754
1755
    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
1756
      // If not input/textarea:
1757
      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command
1758
      // If input/textarea:
1759
      //  - If space key => not a dropdown command
1760
      //  - If key is other than escape
1761
      //    - If key is not up or down => not a dropdown command
1762
      //    - If trigger inside the menu => not a dropdown command
1763
      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $$$1(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
1764
        return;
1765
      }
1766
1767
      event.preventDefault();
1768
      event.stopPropagation();
1769
1770
      if (this.disabled || $$$1(this).hasClass(ClassName.DISABLED)) {
1771
        return;
1772
      }
1773
1774
      var parent = Dropdown._getParentFromElement(this);
1775
1776
      var isActive = $$$1(parent).hasClass(ClassName.SHOW);
1777
1778
      if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
1779
        if (event.which === ESCAPE_KEYCODE) {
1780
          var toggle = $$$1(parent).find(Selector.DATA_TOGGLE)[0];
1781
          $$$1(toggle).trigger('focus');
1782
        }
1783
1784
        $$$1(this).trigger('click');
1785
        return;
1786
      }
1787
1788
      var items = $$$1(parent).find(Selector.VISIBLE_ITEMS).get();
1789
1790
      if (items.length === 0) {
1791
        return;
1792
      }
1793
1794
      var index = items.indexOf(event.target);
1795
1796
      if (event.which === ARROW_UP_KEYCODE && index > 0) {
1797
        // Up
1798
        index--;
1799
      }
1800
1801
      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
1802
        // Down
1803
        index++;
1804
      }
1805
1806
      if (index < 0) {
1807
        index = 0;
1808
      }
1809
1810
      items[index].focus();
1811
    };
1812
1813
    _createClass(Dropdown, null, [{
1814
      key: "VERSION",
1815
      get: function get() {
1816
        return VERSION;
1817
      }
1818
    }, {
1819
      key: "Default",
1820
      get: function get() {
1821
        return Default;
1822
      }
1823
    }, {
1824
      key: "DefaultType",
1825
      get: function get() {
1826
        return DefaultType;
1827
      }
1828
    }]);
1829
    return Dropdown;
1830
  }();
1831
  /**
1832
   * ------------------------------------------------------------------------
1833
   * Data Api implementation
1834
   * ------------------------------------------------------------------------
1835
   */
1836
1837
1838
  $$$1(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + " " + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
1839
    event.preventDefault();
1840
    event.stopPropagation();
1841
1842
    Dropdown._jQueryInterface.call($$$1(this), 'toggle');
1843
  }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {
1844
    e.stopPropagation();
1845
  });
1846
  /**
1847
   * ------------------------------------------------------------------------
1848
   * jQuery
1849
   * ------------------------------------------------------------------------
1850
   */
1851
1852
  $$$1.fn[NAME] = Dropdown._jQueryInterface;
1853
  $$$1.fn[NAME].Constructor = Dropdown;
1854
1855
  $$$1.fn[NAME].noConflict = function () {
1856
    $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
1857
    return Dropdown._jQueryInterface;
1858
  };
1859
1860
  return Dropdown;
1861
}($, Popper);
1862
1863
/**
1864
 * --------------------------------------------------------------------------
1865
 * Bootstrap (v4.0.0): modal.js
1866
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1867
 * --------------------------------------------------------------------------
1868
 */
1869
1870
var Modal = function ($$$1) {
1871
  /**
1872
   * ------------------------------------------------------------------------
1873
   * Constants
1874
   * ------------------------------------------------------------------------
1875
   */
1876
  var NAME = 'modal';
1877
  var VERSION = '4.0.0';
1878
  var DATA_KEY = 'bs.modal';
1879
  var EVENT_KEY = "." + DATA_KEY;
1880
  var DATA_API_KEY = '.data-api';
1881
  var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
1882
  var TRANSITION_DURATION = 300;
1883
  var BACKDROP_TRANSITION_DURATION = 150;
1884
  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
1885
1886
  var Default = {
1887
    backdrop: true,
1888
    keyboard: true,
1889
    focus: true,
1890
    show: true
1891
  };
1892
  var DefaultType = {
1893
    backdrop: '(boolean|string)',
1894
    keyboard: 'boolean',
1895
    focus: 'boolean',
1896
    show: 'boolean'
1897
  };
1898
  var Event = {
1899
    HIDE: "hide" + EVENT_KEY,
1900
    HIDDEN: "hidden" + EVENT_KEY,
1901
    SHOW: "show" + EVENT_KEY,
1902
    SHOWN: "shown" + EVENT_KEY,
1903
    FOCUSIN: "focusin" + EVENT_KEY,
1904
    RESIZE: "resize" + EVENT_KEY,
1905
    CLICK_DISMISS: "click.dismiss" + EVENT_KEY,
1906
    KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY,
1907
    MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY,
1908
    MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY,
1909
    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
1910
  };
1911
  var ClassName = {
1912
    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
1913
    BACKDROP: 'modal-backdrop',
1914
    OPEN: 'modal-open',
1915
    FADE: 'fade',
1916
    SHOW: 'show'
1917
  };
1918
  var Selector = {
1919
    DIALOG: '.modal-dialog',
1920
    DATA_TOGGLE: '[data-toggle="modal"]',
1921
    DATA_DISMISS: '[data-dismiss="modal"]',
1922
    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
1923
    STICKY_CONTENT: '.sticky-top',
1924
    NAVBAR_TOGGLER: '.navbar-toggler'
1925
    /**
1926
     * ------------------------------------------------------------------------
1927
     * Class Definition
1928
     * ------------------------------------------------------------------------
1929
     */
1930
1931
  };
1932
1933
  var Modal =
1934
  /*#__PURE__*/
1935
  function () {
1936
    function Modal(element, config) {
1937
      this._config = this._getConfig(config);
1938
      this._element = element;
1939
      this._dialog = $$$1(element).find(Selector.DIALOG)[0];
1940
      this._backdrop = null;
1941
      this._isShown = false;
1942
      this._isBodyOverflowing = false;
1943
      this._ignoreBackdropClick = false;
1944
      this._originalBodyPadding = 0;
1945
      this._scrollbarWidth = 0;
1946
    } // Getters
1947
1948
1949
    var _proto = Modal.prototype;
1950
1951
    // Public
1952
    _proto.toggle = function toggle(relatedTarget) {
1953
      return this._isShown ? this.hide() : this.show(relatedTarget);
1954
    };
1955
1956
    _proto.show = function show(relatedTarget) {
1957
      var _this = this;
1958
1959
      if (this._isTransitioning || this._isShown) {
1960
        return;
1961
      }
1962
1963
      if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE)) {
1964
        this._isTransitioning = true;
1965
      }
1966
1967
      var showEvent = $$$1.Event(Event.SHOW, {
1968
        relatedTarget: relatedTarget
1969
      });
1970
      $$$1(this._element).trigger(showEvent);
1971
1972
      if (this._isShown || showEvent.isDefaultPrevented()) {
1973
        return;
1974
      }
1975
1976
      this._isShown = true;
1977
1978
      this._checkScrollbar();
1979
1980
      this._setScrollbar();
1981
1982
      this._adjustDialog();
1983
1984
      $$$1(document.body).addClass(ClassName.OPEN);
1985
1986
      this._setEscapeEvent();
1987
1988
      this._setResizeEvent();
1989
1990
      $$$1(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {
1991
        return _this.hide(event);
1992
      });
1993
      $$$1(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {
1994
        $$$1(_this._element).one(Event.MOUSEUP_DISMISS, function (event) {
1995
          if ($$$1(event.target).is(_this._element)) {
1996
            _this._ignoreBackdropClick = true;
1997
          }
1998
        });
1999
      });
2000
2001
      this._showBackdrop(function () {
2002
        return _this._showElement(relatedTarget);
2003
      });
2004
    };
2005
2006
    _proto.hide = function hide(event) {
2007
      var _this2 = this;
2008
2009
      if (event) {
2010
        event.preventDefault();
2011
      }
2012
2013
      if (this._isTransitioning || !this._isShown) {
2014
        return;
2015
      }
2016
2017
      var hideEvent = $$$1.Event(Event.HIDE);
2018
      $$$1(this._element).trigger(hideEvent);
2019
2020
      if (!this._isShown || hideEvent.isDefaultPrevented()) {
2021
        return;
2022
      }
2023
2024
      this._isShown = false;
2025
      var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE);
2026
2027
      if (transition) {
2028
        this._isTransitioning = true;
2029
      }
2030
2031
      this._setEscapeEvent();
2032
2033
      this._setResizeEvent();
2034
2035
      $$$1(document).off(Event.FOCUSIN);
2036
      $$$1(this._element).removeClass(ClassName.SHOW);
2037
      $$$1(this._element).off(Event.CLICK_DISMISS);
2038
      $$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS);
2039
2040
      if (transition) {
2041
        $$$1(this._element).one(Util.TRANSITION_END, function (event) {
2042
          return _this2._hideModal(event);
2043
        }).emulateTransitionEnd(TRANSITION_DURATION);
2044
      } else {
2045
        this._hideModal();
2046
      }
2047
    };
2048
2049
    _proto.dispose = function dispose() {
2050
      $$$1.removeData(this._element, DATA_KEY);
2051
      $$$1(window, document, this._element, this._backdrop).off(EVENT_KEY);
2052
      this._config = null;
2053
      this._element = null;
2054
      this._dialog = null;
2055
      this._backdrop = null;
2056
      this._isShown = null;
2057
      this._isBodyOverflowing = null;
2058
      this._ignoreBackdropClick = null;
2059
      this._scrollbarWidth = null;
2060
    };
2061
2062
    _proto.handleUpdate = function handleUpdate() {
2063
      this._adjustDialog();
2064
    }; // Private
2065
2066
2067
    _proto._getConfig = function _getConfig(config) {
2068
      config = _extends({}, Default, config);
2069
      Util.typeCheckConfig(NAME, config, DefaultType);
2070
      return config;
2071
    };
2072
2073
    _proto._showElement = function _showElement(relatedTarget) {
2074
      var _this3 = this;
2075
2076
      var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE);
2077
2078
      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
0 ignored issues
show
Bug introduced by
The variable Node seems to be never declared. If this is a global, consider adding a /** global: Node */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
2079
        // Don't move modal's DOM position
2080
        document.body.appendChild(this._element);
2081
      }
2082
2083
      this._element.style.display = 'block';
2084
2085
      this._element.removeAttribute('aria-hidden');
2086
2087
      this._element.scrollTop = 0;
2088
2089
      if (transition) {
2090
        Util.reflow(this._element);
2091
      }
2092
2093
      $$$1(this._element).addClass(ClassName.SHOW);
2094
2095
      if (this._config.focus) {
2096
        this._enforceFocus();
2097
      }
2098
2099
      var shownEvent = $$$1.Event(Event.SHOWN, {
2100
        relatedTarget: relatedTarget
2101
      });
2102
2103
      var transitionComplete = function transitionComplete() {
0 ignored issues
show
Comprehensibility Naming Best Practice introduced by
The variable transitionComplete already seems to be declared on line 2103. Consider using another variable name or omitting the var keyword.

This check looks for variables that are declared in multiple lines. There may be several reasons for this.

In the simplest case the variable name was reused by mistake. This may lead to very hard to locate bugs.

If you want to reuse a variable for another purpose, consider declaring it at or near the top of your function and just assigning to it subsequently so it is always declared.

Loading history...
2104
        if (_this3._config.focus) {
2105
          _this3._element.focus();
2106
        }
2107
2108
        _this3._isTransitioning = false;
2109
        $$$1(_this3._element).trigger(shownEvent);
2110
      };
2111
2112
      if (transition) {
2113
        $$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION);
2114
      } else {
2115
        transitionComplete();
2116
      }
2117
    };
2118
2119
    _proto._enforceFocus = function _enforceFocus() {
2120
      var _this4 = this;
2121
2122
      $$$1(document).off(Event.FOCUSIN) // Guard against infinite focus loop
2123
      .on(Event.FOCUSIN, function (event) {
2124
        if (document !== event.target && _this4._element !== event.target && $$$1(_this4._element).has(event.target).length === 0) {
2125
          _this4._element.focus();
2126
        }
2127
      });
2128
    };
2129
2130
    _proto._setEscapeEvent = function _setEscapeEvent() {
2131
      var _this5 = this;
2132
2133
      if (this._isShown && this._config.keyboard) {
2134
        $$$1(this._element).on(Event.KEYDOWN_DISMISS, function (event) {
2135
          if (event.which === ESCAPE_KEYCODE) {
2136
            event.preventDefault();
2137
2138
            _this5.hide();
2139
          }
2140
        });
2141
      } else if (!this._isShown) {
2142
        $$$1(this._element).off(Event.KEYDOWN_DISMISS);
2143
      }
2144
    };
2145
2146
    _proto._setResizeEvent = function _setResizeEvent() {
2147
      var _this6 = this;
2148
2149
      if (this._isShown) {
2150
        $$$1(window).on(Event.RESIZE, function (event) {
2151
          return _this6.handleUpdate(event);
2152
        });
2153
      } else {
2154
        $$$1(window).off(Event.RESIZE);
2155
      }
2156
    };
2157
2158
    _proto._hideModal = function _hideModal() {
2159
      var _this7 = this;
2160
2161
      this._element.style.display = 'none';
2162
2163
      this._element.setAttribute('aria-hidden', true);
2164
2165
      this._isTransitioning = false;
2166
2167
      this._showBackdrop(function () {
2168
        $$$1(document.body).removeClass(ClassName.OPEN);
2169
2170
        _this7._resetAdjustments();
2171
2172
        _this7._resetScrollbar();
2173
2174
        $$$1(_this7._element).trigger(Event.HIDDEN);
2175
      });
2176
    };
2177
2178
    _proto._removeBackdrop = function _removeBackdrop() {
2179
      if (this._backdrop) {
2180
        $$$1(this._backdrop).remove();
2181
        this._backdrop = null;
2182
      }
2183
    };
2184
2185
    _proto._showBackdrop = function _showBackdrop(callback) {
2186
      var _this8 = this;
2187
2188
      var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
2189
2190
      if (this._isShown && this._config.backdrop) {
2191
        var doAnimate = Util.supportsTransitionEnd() && animate;
2192
        this._backdrop = document.createElement('div');
2193
        this._backdrop.className = ClassName.BACKDROP;
2194
2195
        if (animate) {
2196
          $$$1(this._backdrop).addClass(animate);
2197
        }
2198
2199
        $$$1(this._backdrop).appendTo(document.body);
2200
        $$$1(this._element).on(Event.CLICK_DISMISS, function (event) {
2201
          if (_this8._ignoreBackdropClick) {
2202
            _this8._ignoreBackdropClick = false;
2203
            return;
2204
          }
2205
2206
          if (event.target !== event.currentTarget) {
2207
            return;
2208
          }
2209
2210
          if (_this8._config.backdrop === 'static') {
2211
            _this8._element.focus();
2212
          } else {
2213
            _this8.hide();
2214
          }
2215
        });
2216
2217
        if (doAnimate) {
2218
          Util.reflow(this._backdrop);
2219
        }
2220
2221
        $$$1(this._backdrop).addClass(ClassName.SHOW);
2222
2223
        if (!callback) {
2224
          return;
2225
        }
2226
2227
        if (!doAnimate) {
2228
          callback();
2229
          return;
2230
        }
2231
2232
        $$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);
2233
      } else if (!this._isShown && this._backdrop) {
2234
        $$$1(this._backdrop).removeClass(ClassName.SHOW);
2235
2236
        var callbackRemove = function callbackRemove() {
0 ignored issues
show
Comprehensibility Naming Best Practice introduced by
The variable callbackRemove already seems to be declared on line 2236. Consider using another variable name or omitting the var keyword.

This check looks for variables that are declared in multiple lines. There may be several reasons for this.

In the simplest case the variable name was reused by mistake. This may lead to very hard to locate bugs.

If you want to reuse a variable for another purpose, consider declaring it at or near the top of your function and just assigning to it subsequently so it is always declared.

Loading history...
2237
          _this8._removeBackdrop();
2238
2239
          if (callback) {
2240
            callback();
2241
          }
2242
        };
2243
2244
        if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE)) {
2245
          $$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);
2246
        } else {
2247
          callbackRemove();
2248
        }
2249
      } else if (callback) {
2250
        callback();
2251
      }
2252
    }; // ----------------------------------------------------------------------
2253
    // the following methods are used to handle overflowing modals
2254
    // todo (fat): these should probably be refactored out of modal.js
2255
    // ----------------------------------------------------------------------
2256
2257
2258
    _proto._adjustDialog = function _adjustDialog() {
2259
      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
2260
2261
      if (!this._isBodyOverflowing && isModalOverflowing) {
2262
        this._element.style.paddingLeft = this._scrollbarWidth + "px";
2263
      }
2264
2265
      if (this._isBodyOverflowing && !isModalOverflowing) {
2266
        this._element.style.paddingRight = this._scrollbarWidth + "px";
2267
      }
2268
    };
2269
2270
    _proto._resetAdjustments = function _resetAdjustments() {
2271
      this._element.style.paddingLeft = '';
2272
      this._element.style.paddingRight = '';
2273
    };
2274
2275
    _proto._checkScrollbar = function _checkScrollbar() {
2276
      var rect = document.body.getBoundingClientRect();
2277
      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;
2278
      this._scrollbarWidth = this._getScrollbarWidth();
2279
    };
2280
2281
    _proto._setScrollbar = function _setScrollbar() {
2282
      var _this9 = this;
2283
2284
      if (this._isBodyOverflowing) {
2285
        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
2286
        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
2287
        // Adjust fixed content padding
2288
        $$$1(Selector.FIXED_CONTENT).each(function (index, element) {
2289
          var actualPadding = $$$1(element)[0].style.paddingRight;
2290
          var calculatedPadding = $$$1(element).css('padding-right');
2291
          $$$1(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px");
2292
        }); // Adjust sticky content margin
2293
2294
        $$$1(Selector.STICKY_CONTENT).each(function (index, element) {
2295
          var actualMargin = $$$1(element)[0].style.marginRight;
2296
          var calculatedMargin = $$$1(element).css('margin-right');
2297
          $$$1(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px");
2298
        }); // Adjust navbar-toggler margin
2299
2300
        $$$1(Selector.NAVBAR_TOGGLER).each(function (index, element) {
2301
          var actualMargin = $$$1(element)[0].style.marginRight;
2302
          var calculatedMargin = $$$1(element).css('margin-right');
2303
          $$$1(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) + _this9._scrollbarWidth + "px");
2304
        }); // Adjust body padding
2305
2306
        var actualPadding = document.body.style.paddingRight;
2307
        var calculatedPadding = $$$1('body').css('padding-right');
2308
        $$$1('body').data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
2309
      }
2310
    };
2311
2312
    _proto._resetScrollbar = function _resetScrollbar() {
2313
      // Restore fixed content padding
2314
      $$$1(Selector.FIXED_CONTENT).each(function (index, element) {
2315
        var padding = $$$1(element).data('padding-right');
2316
2317
        if (typeof padding !== 'undefined') {
2318
          $$$1(element).css('padding-right', padding).removeData('padding-right');
2319
        }
2320
      }); // Restore sticky content and navbar-toggler margin
2321
2322
      $$$1(Selector.STICKY_CONTENT + ", " + Selector.NAVBAR_TOGGLER).each(function (index, element) {
2323
        var margin = $$$1(element).data('margin-right');
2324
2325
        if (typeof margin !== 'undefined') {
2326
          $$$1(element).css('margin-right', margin).removeData('margin-right');
2327
        }
2328
      }); // Restore body padding
2329
2330
      var padding = $$$1('body').data('padding-right');
2331
2332
      if (typeof padding !== 'undefined') {
2333
        $$$1('body').css('padding-right', padding).removeData('padding-right');
2334
      }
2335
    };
2336
2337
    _proto._getScrollbarWidth = function _getScrollbarWidth() {
2338
      // thx d.walsh
2339
      var scrollDiv = document.createElement('div');
2340
      scrollDiv.className = ClassName.SCROLLBAR_MEASURER;
2341
      document.body.appendChild(scrollDiv);
2342
      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
2343
      document.body.removeChild(scrollDiv);
2344
      return scrollbarWidth;
2345
    }; // Static
2346
2347
2348
    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
2349
      return this.each(function () {
2350
        var data = $$$1(this).data(DATA_KEY);
2351
2352
        var _config = _extends({}, Modal.Default, $$$1(this).data(), typeof config === 'object' && config);
2353
2354
        if (!data) {
2355
          data = new Modal(this, _config);
2356
          $$$1(this).data(DATA_KEY, data);
2357
        }
2358
2359
        if (typeof config === 'string') {
2360
          if (typeof data[config] === 'undefined') {
2361
            throw new TypeError("No method named \"" + config + "\"");
2362
          }
2363
2364
          data[config](relatedTarget);
2365
        } else if (_config.show) {
2366
          data.show(relatedTarget);
2367
        }
2368
      });
2369
    };
2370
2371
    _createClass(Modal, null, [{
2372
      key: "VERSION",
2373
      get: function get() {
2374
        return VERSION;
2375
      }
2376
    }, {
2377
      key: "Default",
2378
      get: function get() {
2379
        return Default;
2380
      }
2381
    }]);
2382
    return Modal;
2383
  }();
2384
  /**
2385
   * ------------------------------------------------------------------------
2386
   * Data Api implementation
2387
   * ------------------------------------------------------------------------
2388
   */
2389
2390
2391
  $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
2392
    var _this10 = this;
2393
2394
    var target;
2395
    var selector = Util.getSelectorFromElement(this);
2396
2397
    if (selector) {
2398
      target = $$$1(selector)[0];
2399
    }
2400
2401
    var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _extends({}, $$$1(target).data(), $$$1(this).data());
0 ignored issues
show
Bug introduced by
The variable target does not seem to be initialized in case selector on line 2397 is false. Are you sure the function $$$1 handles undefined variables?
Loading history...
2402
2403
    if (this.tagName === 'A' || this.tagName === 'AREA') {
2404
      event.preventDefault();
2405
    }
2406
2407
    var $target = $$$1(target).one(Event.SHOW, function (showEvent) {
2408
      if (showEvent.isDefaultPrevented()) {
2409
        // Only register focus restorer if modal will actually get shown
2410
        return;
2411
      }
2412
2413
      $target.one(Event.HIDDEN, function () {
2414
        if ($$$1(_this10).is(':visible')) {
2415
          _this10.focus();
2416
        }
2417
      });
2418
    });
2419
2420
    Modal._jQueryInterface.call($$$1(target), config, this);
2421
  });
2422
  /**
2423
   * ------------------------------------------------------------------------
2424
   * jQuery
2425
   * ------------------------------------------------------------------------
2426
   */
2427
2428
  $$$1.fn[NAME] = Modal._jQueryInterface;
2429
  $$$1.fn[NAME].Constructor = Modal;
2430
2431
  $$$1.fn[NAME].noConflict = function () {
2432
    $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
2433
    return Modal._jQueryInterface;
2434
  };
2435
2436
  return Modal;
2437
}($);
2438
2439
/**
2440
 * --------------------------------------------------------------------------
2441
 * Bootstrap (v4.0.0): tooltip.js
2442
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2443
 * --------------------------------------------------------------------------
2444
 */
2445
2446
var Tooltip = function ($$$1) {
2447
  /**
2448
   * ------------------------------------------------------------------------
2449
   * Constants
2450
   * ------------------------------------------------------------------------
2451
   */
2452
  var NAME = 'tooltip';
2453
  var VERSION = '4.0.0';
2454
  var DATA_KEY = 'bs.tooltip';
2455
  var EVENT_KEY = "." + DATA_KEY;
2456
  var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
2457
  var TRANSITION_DURATION = 150;
2458
  var CLASS_PREFIX = 'bs-tooltip';
2459
  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
2460
  var DefaultType = {
2461
    animation: 'boolean',
2462
    template: 'string',
2463
    title: '(string|element|function)',
2464
    trigger: 'string',
2465
    delay: '(number|object)',
2466
    html: 'boolean',
2467
    selector: '(string|boolean)',
2468
    placement: '(string|function)',
2469
    offset: '(number|string)',
2470
    container: '(string|element|boolean)',
2471
    fallbackPlacement: '(string|array)',
2472
    boundary: '(string|element)'
2473
  };
2474
  var AttachmentMap = {
2475
    AUTO: 'auto',
2476
    TOP: 'top',
2477
    RIGHT: 'right',
2478
    BOTTOM: 'bottom',
2479
    LEFT: 'left'
2480
  };
2481
  var Default = {
2482
    animation: true,
2483
    template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>',
2484
    trigger: 'hover focus',
2485
    title: '',
2486
    delay: 0,
2487
    html: false,
2488
    selector: false,
2489
    placement: 'top',
2490
    offset: 0,
2491
    container: false,
2492
    fallbackPlacement: 'flip',
2493
    boundary: 'scrollParent'
2494
  };
2495
  var HoverState = {
2496
    SHOW: 'show',
2497
    OUT: 'out'
2498
  };
2499
  var Event = {
2500
    HIDE: "hide" + EVENT_KEY,
2501
    HIDDEN: "hidden" + EVENT_KEY,
2502
    SHOW: "show" + EVENT_KEY,
2503
    SHOWN: "shown" + EVENT_KEY,
2504
    INSERTED: "inserted" + EVENT_KEY,
2505
    CLICK: "click" + EVENT_KEY,
2506
    FOCUSIN: "focusin" + EVENT_KEY,
2507
    FOCUSOUT: "focusout" + EVENT_KEY,
2508
    MOUSEENTER: "mouseenter" + EVENT_KEY,
2509
    MOUSELEAVE: "mouseleave" + EVENT_KEY
2510
  };
2511
  var ClassName = {
2512
    FADE: 'fade',
2513
    SHOW: 'show'
2514
  };
2515
  var Selector = {
2516
    TOOLTIP: '.tooltip',
2517
    TOOLTIP_INNER: '.tooltip-inner',
2518
    ARROW: '.arrow'
2519
  };
2520
  var Trigger = {
2521
    HOVER: 'hover',
2522
    FOCUS: 'focus',
2523
    CLICK: 'click',
2524
    MANUAL: 'manual'
2525
    /**
2526
     * ------------------------------------------------------------------------
2527
     * Class Definition
2528
     * ------------------------------------------------------------------------
2529
     */
2530
2531
  };
2532
2533
  var Tooltip =
2534
  /*#__PURE__*/
2535
  function () {
2536
    function Tooltip(element, config) {
2537
      /**
2538
       * Check for Popper dependency
2539
       * Popper - https://popper.js.org
2540
       */
2541
      if (typeof Popper === 'undefined') {
2542
        throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)');
2543
      } // private
2544
2545
2546
      this._isEnabled = true;
2547
      this._timeout = 0;
2548
      this._hoverState = '';
2549
      this._activeTrigger = {};
2550
      this._popper = null; // Protected
2551
2552
      this.element = element;
2553
      this.config = this._getConfig(config);
2554
      this.tip = null;
2555
2556
      this._setListeners();
2557
    } // Getters
2558
2559
2560
    var _proto = Tooltip.prototype;
2561
2562
    // Public
2563
    _proto.enable = function enable() {
2564
      this._isEnabled = true;
2565
    };
2566
2567
    _proto.disable = function disable() {
2568
      this._isEnabled = false;
2569
    };
2570
2571
    _proto.toggleEnabled = function toggleEnabled() {
2572
      this._isEnabled = !this._isEnabled;
2573
    };
2574
2575
    _proto.toggle = function toggle(event) {
2576
      if (!this._isEnabled) {
2577
        return;
2578
      }
2579
2580
      if (event) {
2581
        var dataKey = this.constructor.DATA_KEY;
2582
        var context = $$$1(event.currentTarget).data(dataKey);
2583
2584
        if (!context) {
2585
          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
2586
          $$$1(event.currentTarget).data(dataKey, context);
2587
        }
2588
2589
        context._activeTrigger.click = !context._activeTrigger.click;
2590
2591
        if (context._isWithActiveTrigger()) {
2592
          context._enter(null, context);
2593
        } else {
2594
          context._leave(null, context);
2595
        }
2596
      } else {
2597
        if ($$$1(this.getTipElement()).hasClass(ClassName.SHOW)) {
2598
          this._leave(null, this);
2599
2600
          return;
2601
        }
2602
2603
        this._enter(null, this);
2604
      }
2605
    };
2606
2607
    _proto.dispose = function dispose() {
2608
      clearTimeout(this._timeout);
2609
      $$$1.removeData(this.element, this.constructor.DATA_KEY);
2610
      $$$1(this.element).off(this.constructor.EVENT_KEY);
2611
      $$$1(this.element).closest('.modal').off('hide.bs.modal');
2612
2613
      if (this.tip) {
2614
        $$$1(this.tip).remove();
2615
      }
2616
2617
      this._isEnabled = null;
2618
      this._timeout = null;
2619
      this._hoverState = null;
2620
      this._activeTrigger = null;
2621
2622
      if (this._popper !== null) {
2623
        this._popper.destroy();
2624
      }
2625
2626
      this._popper = null;
2627
      this.element = null;
2628
      this.config = null;
2629
      this.tip = null;
2630
    };
2631
2632
    _proto.show = function show() {
2633
      var _this = this;
2634
2635
      if ($$$1(this.element).css('display') === 'none') {
2636
        throw new Error('Please use show on visible elements');
2637
      }
2638
2639
      var showEvent = $$$1.Event(this.constructor.Event.SHOW);
2640
2641
      if (this.isWithContent() && this._isEnabled) {
2642
        $$$1(this.element).trigger(showEvent);
2643
        var isInTheDom = $$$1.contains(this.element.ownerDocument.documentElement, this.element);
2644
2645
        if (showEvent.isDefaultPrevented() || !isInTheDom) {
2646
          return;
2647
        }
2648
2649
        var tip = this.getTipElement();
2650
        var tipId = Util.getUID(this.constructor.NAME);
2651
        tip.setAttribute('id', tipId);
2652
        this.element.setAttribute('aria-describedby', tipId);
2653
        this.setContent();
2654
2655
        if (this.config.animation) {
2656
          $$$1(tip).addClass(ClassName.FADE);
2657
        }
2658
2659
        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
2660
2661
        var attachment = this._getAttachment(placement);
2662
2663
        this.addAttachmentClass(attachment);
2664
        var container = this.config.container === false ? document.body : $$$1(this.config.container);
2665
        $$$1(tip).data(this.constructor.DATA_KEY, this);
2666
2667
        if (!$$$1.contains(this.element.ownerDocument.documentElement, this.tip)) {
2668
          $$$1(tip).appendTo(container);
2669
        }
2670
2671
        $$$1(this.element).trigger(this.constructor.Event.INSERTED);
2672
        this._popper = new Popper(this.element, tip, {
2673
          placement: attachment,
2674
          modifiers: {
2675
            offset: {
2676
              offset: this.config.offset
2677
            },
2678
            flip: {
2679
              behavior: this.config.fallbackPlacement
2680
            },
2681
            arrow: {
2682
              element: Selector.ARROW
2683
            },
2684
            preventOverflow: {
2685
              boundariesElement: this.config.boundary
2686
            }
2687
          },
2688
          onCreate: function onCreate(data) {
2689
            if (data.originalPlacement !== data.placement) {
2690
              _this._handlePopperPlacementChange(data);
2691
            }
2692
          },
2693
          onUpdate: function onUpdate(data) {
2694
            _this._handlePopperPlacementChange(data);
2695
          }
2696
        });
2697
        $$$1(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra
2698
        // empty mouseover listeners to the body's immediate children;
2699
        // only needed because of broken event delegation on iOS
2700
        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
2701
2702
        if ('ontouchstart' in document.documentElement) {
2703
          $$$1('body').children().on('mouseover', null, $$$1.noop);
2704
        }
2705
2706
        var complete = function complete() {
0 ignored issues
show
Comprehensibility Naming Best Practice introduced by
The variable complete already seems to be declared on line 2706. Consider using another variable name or omitting the var keyword.

This check looks for variables that are declared in multiple lines. There may be several reasons for this.

In the simplest case the variable name was reused by mistake. This may lead to very hard to locate bugs.

If you want to reuse a variable for another purpose, consider declaring it at or near the top of your function and just assigning to it subsequently so it is always declared.

Loading history...
2707
          if (_this.config.animation) {
2708
            _this._fixTransition();
2709
          }
2710
2711
          var prevHoverState = _this._hoverState;
2712
          _this._hoverState = null;
2713
          $$$1(_this.element).trigger(_this.constructor.Event.SHOWN);
2714
2715
          if (prevHoverState === HoverState.OUT) {
2716
            _this._leave(null, _this);
2717
          }
2718
        };
2719
2720
        if (Util.supportsTransitionEnd() && $$$1(this.tip).hasClass(ClassName.FADE)) {
2721
          $$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION);
2722
        } else {
2723
          complete();
2724
        }
2725
      }
2726
    };
2727
2728
    _proto.hide = function hide(callback) {
2729
      var _this2 = this;
2730
2731
      var tip = this.getTipElement();
2732
      var hideEvent = $$$1.Event(this.constructor.Event.HIDE);
2733
2734
      var complete = function complete() {
0 ignored issues
show
Comprehensibility Naming Best Practice introduced by
The variable complete already seems to be declared on line 2734. Consider using another variable name or omitting the var keyword.

This check looks for variables that are declared in multiple lines. There may be several reasons for this.

In the simplest case the variable name was reused by mistake. This may lead to very hard to locate bugs.

If you want to reuse a variable for another purpose, consider declaring it at or near the top of your function and just assigning to it subsequently so it is always declared.

Loading history...
2735
        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {
2736
          tip.parentNode.removeChild(tip);
2737
        }
2738
2739
        _this2._cleanTipClass();
2740
2741
        _this2.element.removeAttribute('aria-describedby');
2742
2743
        $$$1(_this2.element).trigger(_this2.constructor.Event.HIDDEN);
2744
2745
        if (_this2._popper !== null) {
2746
          _this2._popper.destroy();
2747
        }
2748
2749
        if (callback) {
2750
          callback();
2751
        }
2752
      };
2753
2754
      $$$1(this.element).trigger(hideEvent);
2755
2756
      if (hideEvent.isDefaultPrevented()) {
2757
        return;
2758
      }
2759
2760
      $$$1(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra
2761
      // empty mouseover listeners we added for iOS support
2762
2763
      if ('ontouchstart' in document.documentElement) {
2764
        $$$1('body').children().off('mouseover', null, $$$1.noop);
2765
      }
2766
2767
      this._activeTrigger[Trigger.CLICK] = false;
2768
      this._activeTrigger[Trigger.FOCUS] = false;
2769
      this._activeTrigger[Trigger.HOVER] = false;
2770
2771
      if (Util.supportsTransitionEnd() && $$$1(this.tip).hasClass(ClassName.FADE)) {
2772
        $$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
2773
      } else {
2774
        complete();
2775
      }
2776
2777
      this._hoverState = '';
2778
    };
2779
2780
    _proto.update = function update() {
2781
      if (this._popper !== null) {
2782
        this._popper.scheduleUpdate();
2783
      }
2784
    }; // Protected
2785
2786
2787
    _proto.isWithContent = function isWithContent() {
2788
      return Boolean(this.getTitle());
2789
    };
2790
2791
    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
2792
      $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
2793
    };
2794
2795
    _proto.getTipElement = function getTipElement() {
2796
      this.tip = this.tip || $$$1(this.config.template)[0];
2797
      return this.tip;
2798
    };
2799
2800
    _proto.setContent = function setContent() {
2801
      var $tip = $$$1(this.getTipElement());
2802
      this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle());
2803
      $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW);
2804
    };
2805
2806
    _proto.setElementContent = function setElementContent($element, content) {
2807
      var html = this.config.html;
2808
2809
      if (typeof content === 'object' && (content.nodeType || content.jquery)) {
2810
        // Content is a DOM node or a jQuery
2811
        if (html) {
2812
          if (!$$$1(content).parent().is($element)) {
2813
            $element.empty().append(content);
2814
          }
2815
        } else {
2816
          $element.text($$$1(content).text());
2817
        }
2818
      } else {
2819
        $element[html ? 'html' : 'text'](content);
2820
      }
2821
    };
2822
2823
    _proto.getTitle = function getTitle() {
2824
      var title = this.element.getAttribute('data-original-title');
2825
2826
      if (!title) {
2827
        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
2828
      }
2829
2830
      return title;
2831
    }; // Private
2832
2833
2834
    _proto._getAttachment = function _getAttachment(placement) {
2835
      return AttachmentMap[placement.toUpperCase()];
2836
    };
2837
2838
    _proto._setListeners = function _setListeners() {
2839
      var _this3 = this;
2840
2841
      var triggers = this.config.trigger.split(' ');
2842
      triggers.forEach(function (trigger) {
2843
        if (trigger === 'click') {
2844
          $$$1(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {
2845
            return _this3.toggle(event);
2846
          });
2847
        } else if (trigger !== Trigger.MANUAL) {
2848
          var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;
2849
          var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;
2850
          $$$1(_this3.element).on(eventIn, _this3.config.selector, function (event) {
2851
            return _this3._enter(event);
2852
          }).on(eventOut, _this3.config.selector, function (event) {
2853
            return _this3._leave(event);
2854
          });
2855
        }
2856
2857
        $$$1(_this3.element).closest('.modal').on('hide.bs.modal', function () {
2858
          return _this3.hide();
2859
        });
2860
      });
2861
2862
      if (this.config.selector) {
2863
        this.config = _extends({}, this.config, {
2864
          trigger: 'manual',
2865
          selector: ''
2866
        });
2867
      } else {
2868
        this._fixTitle();
2869
      }
2870
    };
2871
2872
    _proto._fixTitle = function _fixTitle() {
2873
      var titleType = typeof this.element.getAttribute('data-original-title');
2874
2875
      if (this.element.getAttribute('title') || titleType !== 'string') {
2876
        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
2877
        this.element.setAttribute('title', '');
2878
      }
2879
    };
2880
2881
    _proto._enter = function _enter(event, context) {
2882
      var dataKey = this.constructor.DATA_KEY;
2883
      context = context || $$$1(event.currentTarget).data(dataKey);
2884
2885
      if (!context) {
2886
        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
2887
        $$$1(event.currentTarget).data(dataKey, context);
2888
      }
2889
2890
      if (event) {
2891
        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
2892
      }
2893
2894
      if ($$$1(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {
2895
        context._hoverState = HoverState.SHOW;
2896
        return;
2897
      }
2898
2899
      clearTimeout(context._timeout);
2900
      context._hoverState = HoverState.SHOW;
2901
2902
      if (!context.config.delay || !context.config.delay.show) {
2903
        context.show();
2904
        return;
2905
      }
2906
2907
      context._timeout = setTimeout(function () {
2908
        if (context._hoverState === HoverState.SHOW) {
2909
          context.show();
2910
        }
2911
      }, context.config.delay.show);
2912
    };
2913
2914
    _proto._leave = function _leave(event, context) {
2915
      var dataKey = this.constructor.DATA_KEY;
2916
      context = context || $$$1(event.currentTarget).data(dataKey);
2917
2918
      if (!context) {
2919
        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
2920
        $$$1(event.currentTarget).data(dataKey, context);
2921
      }
2922
2923
      if (event) {
2924
        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
2925
      }
2926
2927
      if (context._isWithActiveTrigger()) {
2928
        return;
2929
      }
2930
2931
      clearTimeout(context._timeout);
2932
      context._hoverState = HoverState.OUT;
2933
2934
      if (!context.config.delay || !context.config.delay.hide) {
2935
        context.hide();
2936
        return;
2937
      }
2938
2939
      context._timeout = setTimeout(function () {
2940
        if (context._hoverState === HoverState.OUT) {
2941
          context.hide();
2942
        }
2943
      }, context.config.delay.hide);
2944
    };
2945
2946
    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {
2947
      for (var trigger in this._activeTrigger) {
0 ignored issues
show
Complexity introduced by
A for in loop automatically includes the property of any prototype object, consider checking the key using hasOwnProperty.

When iterating over the keys of an object, this includes not only the keys of the object, but also keys contained in the prototype of that object. It is generally a best practice to check for these keys specifically:

var someObject;
for (var key in someObject) {
    if ( ! someObject.hasOwnProperty(key)) {
        continue; // Skip keys from the prototype.
    }

    doSomethingWith(key);
}
Loading history...
2948
        if (this._activeTrigger[trigger]) {
2949
          return true;
2950
        }
2951
      }
2952
2953
      return false;
2954
    };
2955
2956
    _proto._getConfig = function _getConfig(config) {
2957
      config = _extends({}, this.constructor.Default, $$$1(this.element).data(), config);
2958
2959
      if (typeof config.delay === 'number') {
2960
        config.delay = {
2961
          show: config.delay,
2962
          hide: config.delay
2963
        };
2964
      }
2965
2966
      if (typeof config.title === 'number') {
2967
        config.title = config.title.toString();
2968
      }
2969
2970
      if (typeof config.content === 'number') {
2971
        config.content = config.content.toString();
2972
      }
2973
2974
      Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
2975
      return config;
2976
    };
2977
2978
    _proto._getDelegateConfig = function _getDelegateConfig() {
2979
      var config = {};
2980
2981
      if (this.config) {
2982
        for (var key in this.config) {
0 ignored issues
show
Complexity introduced by
A for in loop automatically includes the property of any prototype object, consider checking the key using hasOwnProperty.

When iterating over the keys of an object, this includes not only the keys of the object, but also keys contained in the prototype of that object. It is generally a best practice to check for these keys specifically:

var someObject;
for (var key in someObject) {
    if ( ! someObject.hasOwnProperty(key)) {
        continue; // Skip keys from the prototype.
    }

    doSomethingWith(key);
}
Loading history...
2983
          if (this.constructor.Default[key] !== this.config[key]) {
2984
            config[key] = this.config[key];
2985
          }
2986
        }
2987
      }
2988
2989
      return config;
2990
    };
2991
2992
    _proto._cleanTipClass = function _cleanTipClass() {
2993
      var $tip = $$$1(this.getTipElement());
2994
      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
2995
2996
      if (tabClass !== null && tabClass.length > 0) {
2997
        $tip.removeClass(tabClass.join(''));
2998
      }
2999
    };
3000
3001
    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(data) {
3002
      this._cleanTipClass();
3003
3004
      this.addAttachmentClass(this._getAttachment(data.placement));
3005
    };
3006
3007
    _proto._fixTransition = function _fixTransition() {
3008
      var tip = this.getTipElement();
3009
      var initConfigAnimation = this.config.animation;
3010
3011
      if (tip.getAttribute('x-placement') !== null) {
3012
        return;
3013
      }
3014
3015
      $$$1(tip).removeClass(ClassName.FADE);
3016
      this.config.animation = false;
3017
      this.hide();
3018
      this.show();
3019
      this.config.animation = initConfigAnimation;
3020
    }; // Static
3021
3022
3023
    Tooltip._jQueryInterface = function _jQueryInterface(config) {
3024
      return this.each(function () {
3025
        var data = $$$1(this).data(DATA_KEY);
3026
3027
        var _config = typeof config === 'object' && config;
3028
3029
        if (!data && /dispose|hide/.test(config)) {
3030
          return;
3031
        }
3032
3033
        if (!data) {
3034
          data = new Tooltip(this, _config);
3035
          $$$1(this).data(DATA_KEY, data);
3036
        }
3037
3038
        if (typeof config === 'string') {
3039
          if (typeof data[config] === 'undefined') {
3040
            throw new TypeError("No method named \"" + config + "\"");
3041
          }
3042
3043
          data[config]();
3044
        }
3045
      });
3046
    };
3047
3048
    _createClass(Tooltip, null, [{
3049
      key: "VERSION",
3050
      get: function get() {
3051
        return VERSION;
3052
      }
3053
    }, {
3054
      key: "Default",
3055
      get: function get() {
3056
        return Default;
3057
      }
3058
    }, {
3059
      key: "NAME",
3060
      get: function get() {
3061
        return NAME;
3062
      }
3063
    }, {
3064
      key: "DATA_KEY",
3065
      get: function get() {
3066
        return DATA_KEY;
3067
      }
3068
    }, {
3069
      key: "Event",
3070
      get: function get() {
3071
        return Event;
3072
      }
3073
    }, {
3074
      key: "EVENT_KEY",
3075
      get: function get() {
3076
        return EVENT_KEY;
3077
      }
3078
    }, {
3079
      key: "DefaultType",
3080
      get: function get() {
3081
        return DefaultType;
3082
      }
3083
    }]);
3084
    return Tooltip;
3085
  }();
3086
  /**
3087
   * ------------------------------------------------------------------------
3088
   * jQuery
3089
   * ------------------------------------------------------------------------
3090
   */
3091
3092
3093
  $$$1.fn[NAME] = Tooltip._jQueryInterface;
3094
  $$$1.fn[NAME].Constructor = Tooltip;
3095
3096
  $$$1.fn[NAME].noConflict = function () {
3097
    $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
3098
    return Tooltip._jQueryInterface;
3099
  };
3100
3101
  return Tooltip;
3102
}($, Popper);
3103
3104
/**
3105
 * --------------------------------------------------------------------------
3106
 * Bootstrap (v4.0.0): popover.js
3107
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
3108
 * --------------------------------------------------------------------------
3109
 */
3110
3111
var Popover = function ($$$1) {
3112
  /**
3113
   * ------------------------------------------------------------------------
3114
   * Constants
3115
   * ------------------------------------------------------------------------
3116
   */
3117
  var NAME = 'popover';
3118
  var VERSION = '4.0.0';
3119
  var DATA_KEY = 'bs.popover';
3120
  var EVENT_KEY = "." + DATA_KEY;
3121
  var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
3122
  var CLASS_PREFIX = 'bs-popover';
3123
  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
3124
  var Default = _extends({}, Tooltip.Default, {
3125
    placement: 'right',
3126
    trigger: 'click',
3127
    content: '',
3128
    template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
3129
  });
3130
  var DefaultType = _extends({}, Tooltip.DefaultType, {
3131
    content: '(string|element|function)'
3132
  });
3133
  var ClassName = {
3134
    FADE: 'fade',
3135
    SHOW: 'show'
3136
  };
3137
  var Selector = {
3138
    TITLE: '.popover-header',
3139
    CONTENT: '.popover-body'
3140
  };
3141
  var Event = {
3142
    HIDE: "hide" + EVENT_KEY,
3143
    HIDDEN: "hidden" + EVENT_KEY,
3144
    SHOW: "show" + EVENT_KEY,
3145
    SHOWN: "shown" + EVENT_KEY,
3146
    INSERTED: "inserted" + EVENT_KEY,
3147
    CLICK: "click" + EVENT_KEY,
3148
    FOCUSIN: "focusin" + EVENT_KEY,
3149
    FOCUSOUT: "focusout" + EVENT_KEY,
3150
    MOUSEENTER: "mouseenter" + EVENT_KEY,
3151
    MOUSELEAVE: "mouseleave" + EVENT_KEY
3152
    /**
3153
     * ------------------------------------------------------------------------
3154
     * Class Definition
3155
     * ------------------------------------------------------------------------
3156
     */
3157
3158
  };
3159
3160
  var Popover =
3161
  /*#__PURE__*/
3162
  function (_Tooltip) {
3163
    _inheritsLoose(Popover, _Tooltip);
3164
3165
    function Popover() {
3166
      return _Tooltip.apply(this, arguments) || this;
3167
    }
3168
3169
    var _proto = Popover.prototype;
3170
3171
    // Overrides
3172
    _proto.isWithContent = function isWithContent() {
3173
      return this.getTitle() || this._getContent();
3174
    };
3175
3176
    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
3177
      $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
3178
    };
3179
3180
    _proto.getTipElement = function getTipElement() {
3181
      this.tip = this.tip || $$$1(this.config.template)[0];
3182
      return this.tip;
3183
    };
3184
3185
    _proto.setContent = function setContent() {
3186
      var $tip = $$$1(this.getTipElement()); // We use append for html objects to maintain js events
3187
3188
      this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
3189
3190
      var content = this._getContent();
3191
3192
      if (typeof content === 'function') {
3193
        content = content.call(this.element);
3194
      }
3195
3196
      this.setElementContent($tip.find(Selector.CONTENT), content);
3197
      $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW);
3198
    }; // Private
3199
3200
3201
    _proto._getContent = function _getContent() {
3202
      return this.element.getAttribute('data-content') || this.config.content;
3203
    };
3204
3205
    _proto._cleanTipClass = function _cleanTipClass() {
3206
      var $tip = $$$1(this.getTipElement());
3207
      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
3208
3209
      if (tabClass !== null && tabClass.length > 0) {
3210
        $tip.removeClass(tabClass.join(''));
3211
      }
3212
    }; // Static
3213
3214
3215
    Popover._jQueryInterface = function _jQueryInterface(config) {
3216
      return this.each(function () {
3217
        var data = $$$1(this).data(DATA_KEY);
3218
3219
        var _config = typeof config === 'object' ? config : null;
3220
3221
        if (!data && /destroy|hide/.test(config)) {
3222
          return;
3223
        }
3224
3225
        if (!data) {
3226
          data = new Popover(this, _config);
3227
          $$$1(this).data(DATA_KEY, data);
3228
        }
3229
3230
        if (typeof config === 'string') {
3231
          if (typeof data[config] === 'undefined') {
3232
            throw new TypeError("No method named \"" + config + "\"");
3233
          }
3234
3235
          data[config]();
3236
        }
3237
      });
3238
    };
3239
3240
    _createClass(Popover, null, [{
3241
      key: "VERSION",
3242
      // Getters
3243
      get: function get() {
3244
        return VERSION;
3245
      }
3246
    }, {
3247
      key: "Default",
3248
      get: function get() {
3249
        return Default;
3250
      }
3251
    }, {
3252
      key: "NAME",
3253
      get: function get() {
3254
        return NAME;
3255
      }
3256
    }, {
3257
      key: "DATA_KEY",
3258
      get: function get() {
3259
        return DATA_KEY;
3260
      }
3261
    }, {
3262
      key: "Event",
3263
      get: function get() {
3264
        return Event;
3265
      }
3266
    }, {
3267
      key: "EVENT_KEY",
3268
      get: function get() {
3269
        return EVENT_KEY;
3270
      }
3271
    }, {
3272
      key: "DefaultType",
3273
      get: function get() {
3274
        return DefaultType;
3275
      }
3276
    }]);
3277
    return Popover;
3278
  }(Tooltip);
3279
  /**
3280
   * ------------------------------------------------------------------------
3281
   * jQuery
3282
   * ------------------------------------------------------------------------
3283
   */
3284
3285
3286
  $$$1.fn[NAME] = Popover._jQueryInterface;
3287
  $$$1.fn[NAME].Constructor = Popover;
3288
3289
  $$$1.fn[NAME].noConflict = function () {
3290
    $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
3291
    return Popover._jQueryInterface;
3292
  };
3293
3294
  return Popover;
3295
}($);
3296
3297
/**
3298
 * --------------------------------------------------------------------------
3299
 * Bootstrap (v4.0.0): scrollspy.js
3300
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
3301
 * --------------------------------------------------------------------------
3302
 */
3303
3304
var ScrollSpy = function ($$$1) {
3305
  /**
3306
   * ------------------------------------------------------------------------
3307
   * Constants
3308
   * ------------------------------------------------------------------------
3309
   */
3310
  var NAME = 'scrollspy';
3311
  var VERSION = '4.0.0';
3312
  var DATA_KEY = 'bs.scrollspy';
3313
  var EVENT_KEY = "." + DATA_KEY;
3314
  var DATA_API_KEY = '.data-api';
3315
  var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
3316
  var Default = {
3317
    offset: 10,
3318
    method: 'auto',
3319
    target: ''
3320
  };
3321
  var DefaultType = {
3322
    offset: 'number',
3323
    method: 'string',
3324
    target: '(string|element)'
3325
  };
3326
  var Event = {
3327
    ACTIVATE: "activate" + EVENT_KEY,
3328
    SCROLL: "scroll" + EVENT_KEY,
3329
    LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY
3330
  };
3331
  var ClassName = {
3332
    DROPDOWN_ITEM: 'dropdown-item',
3333
    DROPDOWN_MENU: 'dropdown-menu',
3334
    ACTIVE: 'active'
3335
  };
3336
  var Selector = {
3337
    DATA_SPY: '[data-spy="scroll"]',
3338
    ACTIVE: '.active',
3339
    NAV_LIST_GROUP: '.nav, .list-group',
3340
    NAV_LINKS: '.nav-link',
3341
    NAV_ITEMS: '.nav-item',
3342
    LIST_ITEMS: '.list-group-item',
3343
    DROPDOWN: '.dropdown',
3344
    DROPDOWN_ITEMS: '.dropdown-item',
3345
    DROPDOWN_TOGGLE: '.dropdown-toggle'
3346
  };
3347
  var OffsetMethod = {
3348
    OFFSET: 'offset',
3349
    POSITION: 'position'
3350
    /**
3351
     * ------------------------------------------------------------------------
3352
     * Class Definition
3353
     * ------------------------------------------------------------------------
3354
     */
3355
3356
  };
3357
3358
  var ScrollSpy =
3359
  /*#__PURE__*/
3360
  function () {
3361
    function ScrollSpy(element, config) {
3362
      var _this = this;
3363
3364
      this._element = element;
3365
      this._scrollElement = element.tagName === 'BODY' ? window : element;
3366
      this._config = this._getConfig(config);
3367
      this._selector = this._config.target + " " + Selector.NAV_LINKS + "," + (this._config.target + " " + Selector.LIST_ITEMS + ",") + (this._config.target + " " + Selector.DROPDOWN_ITEMS);
3368
      this._offsets = [];
3369
      this._targets = [];
3370
      this._activeTarget = null;
3371
      this._scrollHeight = 0;
3372
      $$$1(this._scrollElement).on(Event.SCROLL, function (event) {
3373
        return _this._process(event);
3374
      });
3375
      this.refresh();
3376
3377
      this._process();
3378
    } // Getters
3379
3380
3381
    var _proto = ScrollSpy.prototype;
3382
3383
    // Public
3384
    _proto.refresh = function refresh() {
3385
      var _this2 = this;
3386
3387
      var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;
3388
      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
3389
      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
3390
      this._offsets = [];
3391
      this._targets = [];
3392
      this._scrollHeight = this._getScrollHeight();
3393
      var targets = $$$1.makeArray($$$1(this._selector));
3394
      targets.map(function (element) {
3395
        var target;
3396
        var targetSelector = Util.getSelectorFromElement(element);
3397
3398
        if (targetSelector) {
3399
          target = $$$1(targetSelector)[0];
3400
        }
3401
3402
        if (target) {
3403
          var targetBCR = target.getBoundingClientRect();
3404
3405
          if (targetBCR.width || targetBCR.height) {
3406
            // TODO (fat): remove sketch reliance on jQuery position/offset
3407
            return [$$$1(target)[offsetMethod]().top + offsetBase, targetSelector];
3408
          }
3409
        }
3410
3411
        return null;
3412
      }).filter(function (item) {
3413
        return item;
3414
      }).sort(function (a, b) {
3415
        return a[0] - b[0];
3416
      }).forEach(function (item) {
3417
        _this2._offsets.push(item[0]);
3418
3419
        _this2._targets.push(item[1]);
3420
      });
3421
    };
3422
3423
    _proto.dispose = function dispose() {
3424
      $$$1.removeData(this._element, DATA_KEY);
3425
      $$$1(this._scrollElement).off(EVENT_KEY);
3426
      this._element = null;
3427
      this._scrollElement = null;
3428
      this._config = null;
3429
      this._selector = null;
3430
      this._offsets = null;
3431
      this._targets = null;
3432
      this._activeTarget = null;
3433
      this._scrollHeight = null;
3434
    }; // Private
3435
3436
3437
    _proto._getConfig = function _getConfig(config) {
3438
      config = _extends({}, Default, config);
3439
3440
      if (typeof config.target !== 'string') {
3441
        var id = $$$1(config.target).attr('id');
3442
3443
        if (!id) {
3444
          id = Util.getUID(NAME);
3445
          $$$1(config.target).attr('id', id);
3446
        }
3447
3448
        config.target = "#" + id;
3449
      }
3450
3451
      Util.typeCheckConfig(NAME, config, DefaultType);
3452
      return config;
3453
    };
3454
3455
    _proto._getScrollTop = function _getScrollTop() {
3456
      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
3457
    };
3458
3459
    _proto._getScrollHeight = function _getScrollHeight() {
3460
      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
3461
    };
3462
3463
    _proto._getOffsetHeight = function _getOffsetHeight() {
3464
      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
3465
    };
3466
3467
    _proto._process = function _process() {
3468
      var scrollTop = this._getScrollTop() + this._config.offset;
3469
3470
      var scrollHeight = this._getScrollHeight();
3471
3472
      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
3473
3474
      if (this._scrollHeight !== scrollHeight) {
3475
        this.refresh();
3476
      }
3477
3478
      if (scrollTop >= maxScroll) {
3479
        var target = this._targets[this._targets.length - 1];
3480
3481
        if (this._activeTarget !== target) {
3482
          this._activate(target);
3483
        }
3484
3485
        return;
3486
      }
3487
3488
      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
3489
        this._activeTarget = null;
3490
3491
        this._clear();
3492
3493
        return;
3494
      }
3495
3496
      for (var i = this._offsets.length; i--;) {
3497
        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
3498
3499
        if (isActiveTarget) {
3500
          this._activate(this._targets[i]);
3501
        }
3502
      }
3503
    };
3504
3505
    _proto._activate = function _activate(target) {
3506
      this._activeTarget = target;
3507
3508
      this._clear();
3509
3510
      var queries = this._selector.split(','); // eslint-disable-next-line arrow-body-style
3511
3512
3513
      queries = queries.map(function (selector) {
3514
        return selector + "[data-target=\"" + target + "\"]," + (selector + "[href=\"" + target + "\"]");
3515
      });
3516
      var $link = $$$1(queries.join(','));
3517
3518
      if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {
3519
        $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);
3520
        $link.addClass(ClassName.ACTIVE);
3521
      } else {
3522
        // Set triggered link as active
3523
        $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active
3524
        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
3525
3526
        $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + ", " + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item
3527
3528
        $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);
3529
      }
3530
3531
      $$$1(this._scrollElement).trigger(Event.ACTIVATE, {
3532
        relatedTarget: target
3533
      });
3534
    };
3535
3536
    _proto._clear = function _clear() {
3537
      $$$1(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE);
3538
    }; // Static
3539
3540
3541
    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
3542
      return this.each(function () {
3543
        var data = $$$1(this).data(DATA_KEY);
3544
3545
        var _config = typeof config === 'object' && config;
3546
3547
        if (!data) {
3548
          data = new ScrollSpy(this, _config);
3549
          $$$1(this).data(DATA_KEY, data);
3550
        }
3551
3552
        if (typeof config === 'string') {
3553
          if (typeof data[config] === 'undefined') {
3554
            throw new TypeError("No method named \"" + config + "\"");
3555
          }
3556
3557
          data[config]();
3558
        }
3559
      });
3560
    };
3561
3562
    _createClass(ScrollSpy, null, [{
3563
      key: "VERSION",
3564
      get: function get() {
3565
        return VERSION;
3566
      }
3567
    }, {
3568
      key: "Default",
3569
      get: function get() {
3570
        return Default;
3571
      }
3572
    }]);
3573
    return ScrollSpy;
3574
  }();
3575
  /**
3576
   * ------------------------------------------------------------------------
3577
   * Data Api implementation
3578
   * ------------------------------------------------------------------------
3579
   */
3580
3581
3582
  $$$1(window).on(Event.LOAD_DATA_API, function () {
3583
    var scrollSpys = $$$1.makeArray($$$1(Selector.DATA_SPY));
3584
3585
    for (var i = scrollSpys.length; i--;) {
3586
      var $spy = $$$1(scrollSpys[i]);
3587
3588
      ScrollSpy._jQueryInterface.call($spy, $spy.data());
3589
    }
3590
  });
3591
  /**
3592
   * ------------------------------------------------------------------------
3593
   * jQuery
3594
   * ------------------------------------------------------------------------
3595
   */
3596
3597
  $$$1.fn[NAME] = ScrollSpy._jQueryInterface;
3598
  $$$1.fn[NAME].Constructor = ScrollSpy;
3599
3600
  $$$1.fn[NAME].noConflict = function () {
3601
    $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
3602
    return ScrollSpy._jQueryInterface;
3603
  };
3604
3605
  return ScrollSpy;
3606
}($);
3607
3608
/**
3609
 * --------------------------------------------------------------------------
3610
 * Bootstrap (v4.0.0): tab.js
3611
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
3612
 * --------------------------------------------------------------------------
3613
 */
3614
3615
var Tab = function ($$$1) {
3616
  /**
3617
   * ------------------------------------------------------------------------
3618
   * Constants
3619
   * ------------------------------------------------------------------------
3620
   */
3621
  var NAME = 'tab';
3622
  var VERSION = '4.0.0';
3623
  var DATA_KEY = 'bs.tab';
3624
  var EVENT_KEY = "." + DATA_KEY;
3625
  var DATA_API_KEY = '.data-api';
3626
  var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
3627
  var TRANSITION_DURATION = 150;
3628
  var Event = {
3629
    HIDE: "hide" + EVENT_KEY,
3630
    HIDDEN: "hidden" + EVENT_KEY,
3631
    SHOW: "show" + EVENT_KEY,
3632
    SHOWN: "shown" + EVENT_KEY,
3633
    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
3634
  };
3635
  var ClassName = {
3636
    DROPDOWN_MENU: 'dropdown-menu',
3637
    ACTIVE: 'active',
3638
    DISABLED: 'disabled',
3639
    FADE: 'fade',
3640
    SHOW: 'show'
3641
  };
3642
  var Selector = {
3643
    DROPDOWN: '.dropdown',
3644
    NAV_LIST_GROUP: '.nav, .list-group',
3645
    ACTIVE: '.active',
3646
    ACTIVE_UL: '> li > .active',
3647
    DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
3648
    DROPDOWN_TOGGLE: '.dropdown-toggle',
3649
    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
3650
    /**
3651
     * ------------------------------------------------------------------------
3652
     * Class Definition
3653
     * ------------------------------------------------------------------------
3654
     */
3655
3656
  };
3657
3658
  var Tab =
3659
  /*#__PURE__*/
3660
  function () {
3661
    function Tab(element) {
3662
      this._element = element;
3663
    } // Getters
3664
3665
3666
    var _proto = Tab.prototype;
3667
3668
    // Public
3669
    _proto.show = function show() {
3670
      var _this = this;
3671
3672
      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $$$1(this._element).hasClass(ClassName.ACTIVE) || $$$1(this._element).hasClass(ClassName.DISABLED)) {
0 ignored issues
show
Bug introduced by
The variable Node seems to be never declared. If this is a global, consider adding a /** global: Node */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
3673
        return;
3674
      }
3675
3676
      var target;
3677
      var previous;
3678
      var listElement = $$$1(this._element).closest(Selector.NAV_LIST_GROUP)[0];
3679
      var selector = Util.getSelectorFromElement(this._element);
3680
3681
      if (listElement) {
3682
        var itemSelector = listElement.nodeName === 'UL' ? Selector.ACTIVE_UL : Selector.ACTIVE;
3683
        previous = $$$1.makeArray($$$1(listElement).find(itemSelector));
3684
        previous = previous[previous.length - 1];
3685
      }
3686
3687
      var hideEvent = $$$1.Event(Event.HIDE, {
3688
        relatedTarget: this._element
3689
      });
3690
      var showEvent = $$$1.Event(Event.SHOW, {
3691
        relatedTarget: previous
0 ignored issues
show
Bug introduced by
The variable previous does not seem to be initialized in case listElement on line 3681 is false. Are you sure this can never be the case?
Loading history...
3692
      });
3693
3694
      if (previous) {
3695
        $$$1(previous).trigger(hideEvent);
3696
      }
3697
3698
      $$$1(this._element).trigger(showEvent);
3699
3700
      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
3701
        return;
3702
      }
3703
3704
      if (selector) {
3705
        target = $$$1(selector)[0];
3706
      }
3707
3708
      this._activate(this._element, listElement);
3709
3710
      var complete = function complete() {
0 ignored issues
show
Comprehensibility Naming Best Practice introduced by
The variable complete already seems to be declared on line 3710. Consider using another variable name or omitting the var keyword.

This check looks for variables that are declared in multiple lines. There may be several reasons for this.

In the simplest case the variable name was reused by mistake. This may lead to very hard to locate bugs.

If you want to reuse a variable for another purpose, consider declaring it at or near the top of your function and just assigning to it subsequently so it is always declared.

Loading history...
3711
        var hiddenEvent = $$$1.Event(Event.HIDDEN, {
3712
          relatedTarget: _this._element
3713
        });
3714
        var shownEvent = $$$1.Event(Event.SHOWN, {
3715
          relatedTarget: previous
0 ignored issues
show
Bug introduced by
The variable previous does not seem to be initialized in case listElement on line 3681 is false. Are you sure this can never be the case?
Loading history...
3716
        });
3717
        $$$1(previous).trigger(hiddenEvent);
3718
        $$$1(_this._element).trigger(shownEvent);
3719
      };
3720
3721
      if (target) {
3722
        this._activate(target, target.parentNode, complete);
3723
      } else {
3724
        complete();
3725
      }
3726
    };
3727
3728
    _proto.dispose = function dispose() {
3729
      $$$1.removeData(this._element, DATA_KEY);
3730
      this._element = null;
3731
    }; // Private
3732
3733
3734
    _proto._activate = function _activate(element, container, callback) {
3735
      var _this2 = this;
3736
3737
      var activeElements;
3738
3739
      if (container.nodeName === 'UL') {
3740
        activeElements = $$$1(container).find(Selector.ACTIVE_UL);
3741
      } else {
3742
        activeElements = $$$1(container).children(Selector.ACTIVE);
3743
      }
3744
3745
      var active = activeElements[0];
3746
      var isTransitioning = callback && Util.supportsTransitionEnd() && active && $$$1(active).hasClass(ClassName.FADE);
3747
3748
      var complete = function complete() {
0 ignored issues
show
Comprehensibility Naming Best Practice introduced by
The variable complete already seems to be declared on line 3748. Consider using another variable name or omitting the var keyword.

This check looks for variables that are declared in multiple lines. There may be several reasons for this.

In the simplest case the variable name was reused by mistake. This may lead to very hard to locate bugs.

If you want to reuse a variable for another purpose, consider declaring it at or near the top of your function and just assigning to it subsequently so it is always declared.

Loading history...
3749
        return _this2._transitionComplete(element, active, callback);
3750
      };
3751
3752
      if (active && isTransitioning) {
3753
        $$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
3754
      } else {
3755
        complete();
3756
      }
3757
    };
3758
3759
    _proto._transitionComplete = function _transitionComplete(element, active, callback) {
3760
      if (active) {
3761
        $$$1(active).removeClass(ClassName.SHOW + " " + ClassName.ACTIVE);
3762
        var dropdownChild = $$$1(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
3763
3764
        if (dropdownChild) {
3765
          $$$1(dropdownChild).removeClass(ClassName.ACTIVE);
3766
        }
3767
3768
        if (active.getAttribute('role') === 'tab') {
3769
          active.setAttribute('aria-selected', false);
3770
        }
3771
      }
3772
3773
      $$$1(element).addClass(ClassName.ACTIVE);
3774
3775
      if (element.getAttribute('role') === 'tab') {
3776
        element.setAttribute('aria-selected', true);
3777
      }
3778
3779
      Util.reflow(element);
3780
      $$$1(element).addClass(ClassName.SHOW);
3781
3782
      if (element.parentNode && $$$1(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
3783
        var dropdownElement = $$$1(element).closest(Selector.DROPDOWN)[0];
3784
3785
        if (dropdownElement) {
3786
          $$$1(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);
3787
        }
3788
3789
        element.setAttribute('aria-expanded', true);
3790
      }
3791
3792
      if (callback) {
3793
        callback();
3794
      }
3795
    }; // Static
3796
3797
3798
    Tab._jQueryInterface = function _jQueryInterface(config) {
3799
      return this.each(function () {
3800
        var $this = $$$1(this);
3801
        var data = $this.data(DATA_KEY);
3802
3803
        if (!data) {
3804
          data = new Tab(this);
3805
          $this.data(DATA_KEY, data);
3806
        }
3807
3808
        if (typeof config === 'string') {
3809
          if (typeof data[config] === 'undefined') {
3810
            throw new TypeError("No method named \"" + config + "\"");
3811
          }
3812
3813
          data[config]();
3814
        }
3815
      });
3816
    };
3817
3818
    _createClass(Tab, null, [{
3819
      key: "VERSION",
3820
      get: function get() {
3821
        return VERSION;
3822
      }
3823
    }]);
3824
    return Tab;
3825
  }();
3826
  /**
3827
   * ------------------------------------------------------------------------
3828
   * Data Api implementation
3829
   * ------------------------------------------------------------------------
3830
   */
3831
3832
3833
  $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
3834
    event.preventDefault();
3835
3836
    Tab._jQueryInterface.call($$$1(this), 'show');
3837
  });
3838
  /**
3839
   * ------------------------------------------------------------------------
3840
   * jQuery
3841
   * ------------------------------------------------------------------------
3842
   */
3843
3844
  $$$1.fn[NAME] = Tab._jQueryInterface;
3845
  $$$1.fn[NAME].Constructor = Tab;
3846
3847
  $$$1.fn[NAME].noConflict = function () {
3848
    $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
3849
    return Tab._jQueryInterface;
3850
  };
3851
3852
  return Tab;
3853
}($);
3854
3855
/**
3856
 * --------------------------------------------------------------------------
3857
 * Bootstrap (v4.0.0-alpha.6): index.js
3858
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
3859
 * --------------------------------------------------------------------------
3860
 */
3861
3862
(function ($$$1) {
3863
  if (typeof $$$1 === 'undefined') {
3864
    throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.');
3865
  }
3866
3867
  var version = $$$1.fn.jquery.split(' ')[0].split('.');
3868
  var minMajor = 1;
3869
  var ltMajor = 2;
3870
  var minMinor = 9;
3871
  var minPatch = 1;
3872
  var maxMajor = 4;
3873
3874
  if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {
3875
    throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');
3876
  }
3877
})($);
3878
3879
exports.Util = Util;
3880
exports.Alert = Alert;
3881
exports.Button = Button;
3882
exports.Carousel = Carousel;
3883
exports.Collapse = Collapse;
3884
exports.Dropdown = Dropdown;
3885
exports.Modal = Modal;
3886
exports.Popover = Popover;
3887
exports.Scrollspy = ScrollSpy;
3888
exports.Tab = Tab;
3889
exports.Tooltip = Tooltip;
3890
3891
Object.defineProperty(exports, '__esModule', { value: true });
3892
3893
})));
3894
//# sourceMappingURL=bootstrap.js.map
3895